spring注入接口

举报
AAAI 发表于 2021/05/28 22:57:43 2021/05/28
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。