CGLib中Callback介绍

本文介绍了CGLib中的Callback机制,包括FixedValue、InvocationHandler、LazyLoader、MethodInterceptor、Dispatcher和NoOp六种Callback的用途。重点讲述了如何通过实现这些接口来实现不同的代理逻辑,特别强调了MethodInterceptor作为最常用Callback的角色。同时,文中提供了Dispatcher和FixedValue的实现案例,解释了它们如何影响被代理类的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文章: https://blog.youkuaiyun.com/zhang6622056/article/details/87286498

本篇文章主要参考 NeroJings作者的。我只是起到了搬运工的作用。

callbacks简介

这里的callback可以认为是cglib用于生成字节码的实现手段,cglib一共实现了6种callback,用于对代理类目标进行不同手段的代理,非常灵活,分别为

FixedValue

InvocationHandler

LazyLoader

MethodInterceptor

Dispatcher

NoOp

编写实现案例

Dispatcher

实现Dispatcher接口,要求实现loadObject方法,返回期望的代理类。值的一提的是,loadobject方法在每次调用被拦截方法的时候都会被调用一次。

FixedValue

实现FixedValue接口,该callback同样要求实现一个loadobject方法,只不过需要注意的是该loadobject方法相同与重写了被代理类的相应方法,因为在被代理之后,FixedValue callback只会调用loadobject,而不会再调用代理目标类的相应方法!

InvocationHandler

需要实现InvocationHandler接口,实现invoke对象,该拦截传入了proxy对象,用于自定义实现,与MethodInterceptor相似,慎用method的invoke方法。切忌不要造成循环调用

LazyLoader

实现LazyLoader的loadObject方法,返回对象实例,该实例只有第一次调用的时候进行初始化,之后不再重新调用,proxy类初始化时进行了成员的赋值,之后使用该成员进行调用父类方法

MethodInterceptor

实现MethodInterceptor的intercept,实现被代理对象的逻辑植入。也是最常用的callback

NoOp

通过接口声明了一个单例对象,该代理不对被代理类执行任何操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值