CGLIB動(dòng)態(tài)代理應(yīng)用

1.可以代理普通類,也可以代理interface

2.Enhancer類,

enhancer.setSuperClass(被代理類的或interface的 class對(duì)象)

Enhancer enhancer = new Enhancer();

enhancer.setSuperclass(UserService.class);

enhancer.setCallback(Callback的子類實(shí)例對(duì)象 -> 程序員自己寫的實(shí)現(xiàn)類);?

3.常用的CallBack的子接口有

? interface MethodInterceptor{

? Object intercept(Object var1, Method var2, Object[] var3, MethodProxy var4) throws Throwable;

? }

? interface InvocationHandler{

? ? Object invoke(Object var1, Method var2, Object[] var3) throws Throwable;

? }

? interface NoOp extends Callback { //這個(gè)接口就是什么都不做沒有切面邏輯

? ? NoOp INSTANCE = new NoOp() {

? ? };

? }

4.setCallBacks可以設(shè)置多個(gè)callbacks

enhance.setCallBacks(new CallBack[]{backs1,backs2})

可以通過CallbackFilter指定代理類的方法走對(duì)應(yīng)的callback。

enhancer.setCallbackFilter(new CallbackFilter() {

@Override

public int accept(Method method) {

if("test".equals(method.getName())){

//代理類的test方法走第1個(gè)callback - backs1

return 0;

}else if("test1".equals(method.getName())){

//代理類的test方法走第2個(gè)callback - backs2

return 1;

}else {

//其他方法默認(rèn)走第1個(gè)

return 0;

}

}

});

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容