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>