焦作住房和城乡建设厅网站,wordpress卡蜜主题,邯郸免费发布信息平台,做黑界头像网站1. 什么是动态代理
动态代理可以在程序运行过程中#xff0c;基于反射#xff08;JDK Proxy#xff09;或字节码生成#xff08;CGLIB#xff09;#xff0c;为某个类动态地创建一个代理类。这个代理类会拦截对被代理类方法的调用#xff0c;并在执行这些方法的前后添加…1. 什么是动态代理
动态代理可以在程序运行过程中基于反射JDK Proxy或字节码生成CGLIB为某个类动态地创建一个代理类。这个代理类会拦截对被代理类方法的调用并在执行这些方法的前后添加自定义的处理逻辑。是不是觉得这种情况看着很熟悉没错spring aop以及事务管理的底层逻辑就是动态代理。
2. CGLIBCode Generation Library字节码生成库
.java源文件被编译后会生成.class文件该文件的内容就是字节码。在程序运行过程中CGLIB可以动态的生成或修改.class文件以此达到动态代理的目的。
3. 基于反射和基于字节码生成的差异
基于反射在运行时分析和调用现有类的结构类、方法、字段。它操作的是已经存在的、编译好的类。 基于字节码在运行时创建全新的类或修改现有类的字节码结构。它操作的是类的定义本身。
4. CGLIB的作用
CGLIB通过继承目标类创建代理子类。在实例化CGLIB代理时目标类的构造器会像普通子类实例化一样被调用一次。CGLIB可使用该特性保证对象单例生成。为无接口的类提供代理能力通过直接方法调用避免反射开销
注在spring中当目标类实现了接口时默认使用JDK Proxy当目标类没有实现接口时则使用CGLIB。也可以通过配置强制Spring始终使用CGLIB。