spring注入接口

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值