JDK动态代理和CGLib动态代理笔记

Spring AOP

AOP(Aspect Oriented Programming)面向切面编程,Spring AOP则是使用动态代理技术在运行期织入增强的代码。其中使用的动态代理技术有两种代理机制,一种是JDK动态代理,另一种是CGLib动态代理。

JDK动态代理

使用流程
1)创建一个目标接口,和一个目标类,目标类需实现目标接口
2)创建一个类实现InvocationHandler接口,负责织入代码
3)通过Proxy类的静态方法newProxyInstance可以返回一个编织成功的对象
4)返回的对象调用方法即可看到带织入代码的运行结果
原理
java反射机制

CGLib动态代理

使用流程
1)创建一个目标类,不需要接口
2)创建一个类,实现MethodInterceptor(CGLib包)接口,负责编织代码
3)创建2中类的对象,调用getProxy方法即可得到代理实例,这个实例直接调用目标类的方法即可得到带织入代码的运行结果
原理
采用底层字节码技术,为目标类创建子类,子类中采用方法拦截的技术拦截所有父类方法的调用并顺势织入横切逻辑。

对比

JDK代理需要目标类实现接口,CGLib则不用
CGLib创建代理对象的时间比JDK长,而CGLib代理对象的性能是JDK的大概十倍

你可能感兴趣的:(JDK动态代理和CGLib动态代理笔记)