关于spring注入这里,在开发过程中时常碰到,这里看到有人说的挺好的在这里做一下笔记。
这里虽是接口的注入但实际注入的对象是实现类的对象。如果只是单纯数据注入实现类是可以接收注入对象的,在开放中往往会对实现类增强,如事务、日志等,这些是通过AOP动态代理实现的。spring默认jdk动态代理,对实现类对象做增强得到的增强类与实现类是兄弟关系,所以不能用实现类接收增强类对象,只能用接口接收。
//接口:IA//实现类:AImpl//增强类:AImplProxyAImpl aImpl = new AImpl();//通过JDKProxyFactory创建代理对象JDKProxyFactory factory = new JDKProxyFactory(aImpl);AImplProxy aImplProxy = factory.createProxy();//这个增强类对象aImplProxy 只能强转为IA,而不能转为AImpl,因为JDK代理得到的AImplProxy类与AImpl是兄弟关系而非父子由于以上原因,如果将对象注入给实现类而非接口的话,在代理时就会报错。
71568630