实现原理
继承目标类:CGLIB创建的代理类确实是目标类的一个子类。它通过字节码操作,动态生成一个继承自目标类的新类。这样,代理类就可以访问目标类的非final方法和protected及更低访问级别的成员变量,从而实现对这些方法的拦截和增强。
方法增强:在生成的子类中,对于目标类中的每个非final方法,CGLIB都会生成一个方法拦截器(由用户自定义的MethodInterceptor实现),该拦截器定义了在调用原始方法前后需要执行的附加操作,即“增强”的逻辑。这包括但不限于日志记录、事务管理、权限检查等。
动态性:强调“动态创建”是因为这个过程是在应用程序运行期间完成的,不需要手动编写每一个代理类,增加了代码的灵活性和可扩展性。
代码实现
注意,没有引用cglib的依赖,而是用的 org.springframework.cglib 的包,至于为什么,可能是jdk版本的关系,使用原生的cglib依赖,会报错
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
// 目标