CGLIB动态代理和JDK代理的原则

作者:IPIDEA

2022-10-08 14:09:08

CGLIB动态代理和JDK原则

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配置中)


*ipidea提供的服务必须在境外网络环境下使用

热门资讯