jdk动态代理和cglib动态代理都是增强被代理对象的手段之一,jdk动态代理顾名思义是由java官方提供的一种,而cglib是第三方的开源项目
有些书籍中的提到的是委托方和被委托方,二者的对应关系正好相反,即委托方=被代理对象,被委托方=代理对象
二者的区别:
- cglib实现原理是通过集成被代理类来实现动态代理的,因而类的修饰符不能含有final修饰符,并且方法同样不能使用static和final等修饰符,若含有就不能实现增强方法
- jdk实现原理:代理对象和被代理对象必须同时实现同一接口(即含有同一套规范).
cglib代理:
cglib被代理对象:
cglib测试方法:
cglib输出结果:
"D:\Program Files\Java\jdk1.8.0_151\bin\java"