参考文章: 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
通过接口声明了一个单例对象,该代理不对被代理类执行任何操作