[转载]aop代理方式引起的spring注入bean(实现类)与获取bean(实现类)出错
2018-03-01 16:57
633 查看
作者:枫红一叶出处:http://www.cnblogs.com/peak-c/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。描述:
现象一 :A 为 接口,AImpl 为 A 的实现类,且 AImpl 受 aop 扫描,且 aop 无特殊配置
此时若:Spring 中 注入 AImpl 类型的bean,获取一样 报错
Spring 中 注入 A 类型的bean ,获取一样 成功
现象二 :B 没有实现接口,B受 aop 扫描,且 aop无特殊配置
此时若:Spring 中 注入 B 类型的bean,获取一样 成功
分析:
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换
现象一 :因为 AImpl 实现了 A 接口,所有自动使用了JDK proxy ,而JDK proxy 实现原理基于接口生成代理对象(详见下边链接)
代理对象 类型不同于 AImpl ,所以报错
JDK proxy 生成的代理对象也实现了A 接口,so 接口类型可以。
现象二 :B 没有实现接口,故spring 采用 cglib 实现动态代理,其原理是生成子类(详见下边链接)
so , 成功注入与获取。
解决:
Spring 中添加配置 <aop:aspectj-autoproxy proxy-target-class="true"/>
参考:
http://fuhuijun.iteye.com/blog/2253741
JDK动态代理和CGLIB代理的区别
Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
现象一 :A 为 接口,AImpl 为 A 的实现类,且 AImpl 受 aop 扫描,且 aop 无特殊配置
此时若:Spring 中 注入 AImpl 类型的bean,获取一样 报错
Spring 中 注入 A 类型的bean ,获取一样 成功
现象二 :B 没有实现接口,B受 aop 扫描,且 aop无特殊配置
此时若:Spring 中 注入 B 类型的bean,获取一样 成功
分析:
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换
现象一 :因为 AImpl 实现了 A 接口,所有自动使用了JDK proxy ,而JDK proxy 实现原理基于接口生成代理对象(详见下边链接)
代理对象 类型不同于 AImpl ,所以报错
JDK proxy 生成的代理对象也实现了A 接口,so 接口类型可以。
现象二 :B 没有实现接口,故spring 采用 cglib 实现动态代理,其原理是生成子类(详见下边链接)
so , 成功注入与获取。
解决:
Spring 中添加配置 <aop:aspectj-autoproxy proxy-target-class="true"/>
参考:
http://fuhuijun.iteye.com/blog/2253741
JDK动态代理和CGLIB代理的区别
Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
相关文章推荐
- 原始方式:spring四种依赖注入方式 |注解方式:Spring零配置通过注解实现Bean依赖注入
- spring AOP 代理机制、执行过程、四种实现方式及示例详解
- Spring AOP实现方式三之自动扫描注入【附源码】
- Spring中AOP实现的两种方式之JDK和cglib的动态代理
- spring实现AOP的两种方式以及实现动态代理方式
- spring bean 不使用注入的方式获取的两种方式
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理-转载
- Spring的AOP(四):自动代理及Aspect J的方式实现Aop编程
- spring不通过注入的方式获取对象(BeanFactoryAware \ApplicationContextAware )
- spring实现AOP的两种方式以及实现动态代理方式
- Spring的AOP实现方式—ProxyFactoryBean配置方式实现源码剖析
- Spring AOP动态代理原理与实现方式
- Spring AOP动态代理原理与实现方式
- Spring AOP源码解析——AOP动态代理原理和实现方式
- spring工程中,不通过注入的方式获取bean
- Spring进阶之路(12)-注解方式实现Bean的注入
- spring aop(五)--ProxyFactoryBean创建代理的实现
- 【转载】spring aop 三种实现方式示例
- 获取Spring IOC容器代理的Bean实例的几种方式
- SpringJUnit4加载类目录下(src)和WEF-INF目录下的配置文件二--获取注入的bean的二种方式