首页 > 编程语言 > 详细

Spring中JDK的动态代理和CGLIB代理的区别

时间:2016-01-03 11:07:50      阅读:958      评论:0      收藏:0      [点我收藏+]


一,应用范围


         1,如果目标对象实现了接口,在默认情况下会采用JDK的动态代理实现AOP

       2,如果目标对象实现了接口,也可以强制使用CGLIB生成代理实现AOP

       3,如果目标对象没有实现接口,必须引入CGLIB,Spring会在JDK的动态代理和CGLIB代理之间进行切换。



二,强制使用CGLIB代理


          1,引入CGLIB的Jar:


技术分享


2,Spring配置文件中加入强制使用CGLIB代理

 

<!-- 强制使用CGLIB代理 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>



三,小结


          1, JDK的动态代理只能对实现了接口的类进行代理:


技术分享


       如上图,如果要为UserManagerImpl生成代理,这种关系下,可以使用JDK的动态代理,也可以强制使用CGLIB进行代理。


        但是如果我去掉实现关系:


            技术分享


         这时候就必须要使用CGLIB了。


        另外,CGLIB在实现动态代理的时候,主要是为指定的类生成一个子类,例如,我要对上面的UserManagerImpl生成一个代理,会继承这个类,但是这个时候,如果我们把UserManagerImpl定义为final的,就无法被继承了,也就不能生成代理类了。所以,我们的Target object最好不要声明为final的。








Spring中JDK的动态代理和CGLIB代理的区别

原文:http://blog.csdn.net/lhc1105/article/details/50450338

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!