一 概述
由于某些原因需要给某对象提供一个代理以控制该对象的访问,这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
二 代理模式
代理模式的核心是由代理对象来替代访问对象对目标对象的访问。
在我们实现SpringAOP的实现方式有使用代理模式。
实际实现由JdkProxy动态代理和Cglib动态代理。
- 基于JDK的动态代理:面向接口,需要实现具体的接口,形成代理对象,核心为InvocationHandler接口和Proxy类。
- 基于Cglib的动态代理:以继承的方式动态生成目标类的代理。
Cglib是一个强大的,高性能的代码生成库,可以在运行动态的生成某个类的子类,通过修改字节码来实现代理,通过继承的方式实现动态代理。如果某个类被标记为final是,就无法通过Cglib实现动态代理。
Cglib的底层是通过Java字节码操作框架——ASM。
JdkProxy则是通过Java内部的反射机制实现的,反射机制在生成类的过程中共比较高效。
上述内容为个人对代理模式在SpringAOP中的运用,实际代理模式还有很多内容,后续学习总结后,再来补充。