亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于CglibProxy的問題

在CglibProxy類中的intercept方法中,proxy.invokeSuper(obj, args);這樣調用沒有問題,但是用proxy.invoke(obj, args);就會報錯,為什么呢?調用父類的方法,沒有問題,調用自己的問什么會出錯呢?

正在回答

2 回答

我們看一下示例中的代碼:

/**
? * 攔截所有目標類方法的調用
? * obj? 目標類的實例
? * m?? 目標方法的反射對象
? * args? 方法的參數
? * proxy代理類的實例
? */
?@Override
?public Object intercept(Object obj, Method m, Object[] args,
???MethodProxy proxy) throws Throwable {
??System.out.println("日志開始...");
??//代理類調用父類的方法
??proxy.invokeSuper(obj, args);
??System.out.println("日志結束...");
??return null;
?}

?

intercept()方法攔截所有目標類方法的調用,如果調用proxy.invoke(obj, args);

會報java.lang.StackOverflowError異常,原因是將代理類作為目標類,這樣會無限循環調用intercept方法,

導致無限死循環;二代理類的父類只有一個,調用父類的方法只會調用一次。

3 回復 有任何疑惑可以回復我~

謝謝老師的解答,明白了原理。非常感謝。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
模式的秘密---代理模式
  • 參與學習       54906    人
  • 解答問題       134    個

本節課程將帶你領略Java編程語言中代理模式的奧妙

進入課程

關于CglibProxy的問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號