作者:IPIDEA
2022-10-08 14:09:08
CGLIB动态代理和JDK原则
1.jdk动态代理
使用全球住宅IP,高效采集公开数据器(必须实现全球住宅IP,高效采集公开数据器)InvocationHanlder)与反射机制,生成匿名类,实现代理界面,
InvokeHandler在调用具体方法之前。
2.cglb型动态代理
利用ASM开源程序包,代理对象类class通过修改文件的字节码,将文件装载成子类。
3.JDK或CGLIB何时使用?
1)JDK默认情况下,默认使用动态代理AOP。
2)当目标对象实现接口时,AOP可以通过CGLIB强制实现。
3)目标对象的介质不执行的,必须使用CGLIB库,Spring会自动在JDK动态代理与CGLIB之间转换。
4.我怎么用?CGLIB实现AOP?
(1)增加CGLIB库(aspectjrt-xxx.jar,aspectjweaver-xxx.jar,cglib-nodep-xxx.jar)
(2)添加到Spring概要
5.在JDK和CGLIB代码生成字节码有什么区别?
1)只能生成已实现接口的类别JDK动态代理,而不是类。
2)CGLIB实现类的代理主要是指定类生成子并覆盖子类的方法。重写方法以增强部分。但是,最好不要声明类或方法是继承的final,无法继承final类或方法。
6.cglib是否比JDK快?
1)利用CGLib动态代理已经实现并正在实现CGLib使用底层ASM字节码生成框架,生成相应的代理类,
jdk6以前比Java反射更有效。唯一需要注意的是,CGLib不能代表声明为final的方法,
根据CGLib可动态生成代理子类。
2)jdk6,jdk7,jdk8和jdk8在逐步优化JDK后比动态代理CGLIB由于调用次数少,代理效率高;
只有大量调用,jdk6和jdk效率会低于7CGLIB代理,但jdk8比CGLIB代理更有效,
总之,jdk代理的效率随之而来jdk升级版,升级版,CGLIB代理消息没有跟上。
如何使用斯普林JDK或CGLIB?
7.Spring在Bean使用接口JDK的动态代理
1)如果Bean接口没有实现,Spring就会使用CGlib作为实现
2)可以强制CGlib(添加到spring配置中)