cglib工作原理详解

cglib代理一个类时会产生3个class文件,

上面标红部分的类就是两个相关类对应的fastclass文件,HelloServiceImpl F a s t C l a s s B y C G L I B FastClassByCGLIB FastClassByCGLIBbc82cc02.class这个文件是被代理类对应的fastclass文件,HelloServiceImpl E n h a n c e r B y C G L I B EnhancerByCGLIB EnhancerByCGLIB75d5f5ba F a s t C l a s s B y C G L I B FastClassByCGLIB FastClassByCGLIB15a4adc1.class是产生的代理类对应的fastclass文件,下面看我们经常使用的代码:

Enhancer enh = new Enhancer();

enh.setSuperclass(HelloServiceImpl.class);

HelloMethodInterceptor inteceptor = new HelloMethodInterceptor();

HelloServiceImpl hello = new HelloServiceImpl();

inteceptor.setTarget(hello);

enh.setCallbacks(new Callback[]{inteceptor});

HelloServiceImpl serv = (HelloServiceImpl)enh.create();

serv.sayHello();

上面标红部分代码产生的实例就是HelloServiceImpl E n h a n c e r B y C G L I B EnhancerByCGLIB EnhancerByCGLIB75d5f5ba.class这个类对象的实例,下面看下这个类相关部分代码:

public final void sayHello() {

MethodInterceptor var10000 = this.CGLIB$CALLBACK_0;

if (this.CGLIB$CALLBACK_0 == null) {

CGLIB$BIND_CALLBACKS(this);

var10000 = this.CGLIB$CALLBACK_0;

}

if (var10000 != null) {

var10000.intercept(this, CGLIB$sayHello 0 0 0Method, CGLIB e m p t y A r g s , C G L I B emptyArgs, CGLIB emptyArgs,CGLIBsayHello 0 0 0Proxy);

} else {

super.sayHello();

}

}

上面的CALLBACK_0对应的就是HelloMethodInterceptor这个类,所以serv.sayHello()会转而调用HelloMethodInterceptor的intercept方法,下面看下HelloMethodInterceptor这个类:

public class HelloMethodInterceptor implements MethodInterceptor {

private Object target;

public HelloMethodInterceptor(Object target){

this.target = target;

}

@Override

public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {

System.out.println(“before”+arg1.getName());

最后

毕竟工作也这么久了

必看视频!获取2024年最新Java开发全套学习资料 备注Java

,除了途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节

美团面试经验

美团面试
字节面试经验
字节面试
菜鸟面试经验
菜鸟面试
蚂蚁金服面试经验
蚂蚁金服
唯品会面试经验
唯品会

因篇幅有限,图文无法详细发出

[外链图片转存中…(img-c3Oeu6ZZ-1716405359391)]
唯品会面试经验
[外链图片转存中…(img-xvz7hNdr-1716405359391)]

因篇幅有限,图文无法详细发出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值