求解释spring的动态代理!!!

Mr_yyy 2016-01-27 03:18:50
今天配置spring的普通类管理,发现配置了
<aop:aspectj-autoproxy proxy-target-class="true"/>

可以正常使用cglib,而如果再配置上
<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />

就会报错!
java.lang.ClassCastException: $Proxy14 cannot be cast to com.xxx
求说明 我知道aop:aspectj-autoproxy proxy-target-class= true是使用cglib强制动态代理,但是为啥加入后面的就会报错呢?
AnnotationAwareAspectJAutoProxyCreator这个配置究竟对spring影响了什么呢?
如果两个都不配置,也不会报错,说明spring可以自动切换cglib和jdk 这个我明白一点。
如果只配置AnnotationAwareAspectJAutoProxyCreator也会同样错,这是不是说明AnnotationAwareAspectJAutoProxyCreator配置强制使spring使用jdk代理?但是一般的切面也有用到,如果使用是强制jdk代理,那些没实现接口的不都要报错吗?求解释呀
...全文
615 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
衣舞晨风 2016-09-21
  • 打赏
  • 举报
回复
http://blog.csdn.net/jiankunking/article/details/52143504 可以看看这个 但cglib是通过继承来实现的
haozaige11213 2016-01-29
  • 打赏
  • 举报
回复
你这错误是 JDK产生代理,但是却没有用接口接收,导致转换异常, 你下面那个配置好像也是产生代理,因为你的类com.xxx实现了接口,所以默认采用JDK代理
Intboy 2016-01-28
  • 打赏
  • 举报
回复
动态代理好像必须要实现接口吧。
tony4geek 2016-01-28
  • 打赏
  • 举报
回复
引用 4 楼 Mr_yyy 的回复:
引用 3 楼 rui888 的回复:
http://www.cnblogs.com/liuling/p/2014-8-23-001.html
这个我能明白,只是不知道AnnotationAwareAspectJAutoProxyCreator这个东西是做什么用的。。。为什么加上这句话就报错呢?
应该这2个只要配置上一个就可以 吧。 具体我没测试
Mr_yyy 2016-01-28
  • 打赏
  • 举报
回复
引用 3 楼 rui888 的回复:
http://www.cnblogs.com/liuling/p/2014-8-23-001.html
这个我能明白,只是不知道AnnotationAwareAspectJAutoProxyCreator这个东西是做什么用的。。。为什么加上这句话就报错呢?
Mr_yyy 2016-01-28
  • 打赏
  • 举报
回复
引用 2 楼 fengspg 的回复:
动态代理好像必须要实现接口吧。
不是的,cglib可以实现无接口类的动态代理
Mr_yyy 2016-01-27
  • 打赏
  • 举报
回复
我这个是做的测试单元测试的,在context.getBean()是如果是普通类,就会发生上述描述,如果是实现接口的类进行接口注入,就不会出现这些问题。我的疑惑是在普通类的注入上,为什么多了一条AnnotationAwareAspectJAutoProxyCreator配置就会报错呢?

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧