Spring中JDK的动态代理和CGLIB代理的区别
来源:互联网 发布:java停顿用法 编辑:程序博客网 时间:2024/05/16 10:03
一,应用范围
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的。
0 0
- 动态代理:JDK动态代理和CGLIB代理的区别
- 动态代理:JDK动态代理和CGLIB代理的区别
- 动态代理:JDK动态代理和CGLIB代理的区别
- Spring中JDK的动态代理和CGLIB代理的区别
- Spring之JDK动态代理和cgLib的区别
- jdk动态代理和cglib动态代理的区别
- jdk动态代理和cglib动态代理的区别
- java的jdk动态代理和cglib动态代理区别
- 基于Spring AOP的JDK动态代理和CGLIB代理
- JDK动态代理和CGLIB代理的区别
- JDK动态代理和CGLIB代理的区别
- Spring中JDK动态代理和CGLIB动态代理的性能比较
- 最详细的代理讲解--JDK动态代理和cglib代理 (类比spring中事物的代理)
- jdk动态代理与CGLib的区别
- JDK动态代理与CGLIB的区别
- jdk动态代理和cglib代理区别
- Spring的两种代理方式:JDK动态代理和CGLIB动态代理
- Spring的两种代理方式:JDK动态代理和CGLIB动态代理
- 为什么linux平台下软件安装不是双击执行
- 线程池_uThreadPool
- npm的package.json中的dependencies版本号
- 开发的好习惯和坏习惯
- Linux IPC实践(6) --System V消息队列(3)
- Spring中JDK的动态代理和CGLIB代理的区别
- Linux IPC实践(7) --Posix消息队列
- 找到了一个SysuThesis模板,大喜
- 数据链路层笔记
- Linux IPC实践(8) --共享内存/内存映射
- cocos2d-x中关于touch事件的响应
- 期末复习总结
- SAP支持宝典:#MM#如何在归档后启用归档信息系统
- Linux IPC实践(9) --System V共享内存