spring注入接口
【摘要】 spring注入接口
spring为何要注入接口,而注入实现类就会报错?
如果只是单纯注入是可以用实现类接收注入对象的,但是往往开发中会对实现类做增强,如事务,日志等,实现增强的AOP技术是通过动态代理实现的,而spring默认是JDK动态代理,jdk动态代理只能对实现了接口的类生成代理,而不能针对类,而且还可以对实现类对象做增强得到增强类(增强类与实现类是兄弟关系...
spring注入接口
spring为何要注入接口,而注入实现类就会报错?
如果只是单纯注入是可以用实现类接收注入对象的,但是往往开发中会对实现类做增强,如事务,日志等,实现增强的AOP技术是通过动态代理实现的,而spring默认是JDK动态代理,jdk动态代理只能对实现了接口的类生成代理,而不能针对类,而且还可以对实现类对象做增强得到增强类(增强类与实现类是兄弟关系,增强类不能用实现类接收增强类对象,只能用接口接收)。
举个例子:例如类A中需要调用类B中的方法add(),为了方便扩展,使用一个接口Q声明方法add(),B是Q的实现类,此时可以在类A中注入接口或者方法B,来实现add()方法,但是当我们去对B进行扩展时,定义一个类C,C继承了类B,并且重写了add()方法,此时如果A中注入的是类B,则C中的新的add()无法实现。
对实现类B做增强得到的增强类C与实现类B是兄弟关系,所以不能用实现类B接收增强类C对象,只能用接口接收。
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--MapperScannerConfigurer会扫描这个包中的所有接口,把每个接口都执行一次getMapper()方法,得到每个接口的dao对象。
每个Mapper都需要一个MapperFactoryBean-->
<!--注入sqlSessionFactory --> <property name="sqlSessionFactoryBeanName" value=" sqlSessionFactory"/> <!--要扫描的dao包,basePackage:这个属性就是映射接口的包,这个包里面的所有的接口扫描到--> <property name="basePackage" value="com.xxx.dao"/>
</bean>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_38022166/article/details/117353754
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)