2012-03-19 74 views
3

,我碰到下面的語句來了(第193頁):的Spring AOP:確認在談及「臨春2.5」 CGLIB代理行爲

例如,CGLIB代理生成相​​應的字節碼 調用任何直接使用無人值守的方法,大大減少了代理引入的開銷。

我看了一下Spring的源代碼並試了幾次實驗,但是無法證實這個說法。我可以寫什麼簡單的程序來確認它?

回答

0

使用VisualVM並剖析代碼,或使用BCEL轉儲字節碼並查看程序集。對於visualvm路由,請剖析代碼,拍攝快照,驗證方法堆棧跟蹤。

+0

得到堆棧跟蹤,我做了一些更容易。我在建議和非建議的方法中創建了一個Throwable,並打印了它的堆棧跟蹤。但是對於這兩者,它們都是由'Cglib2AopProxy $ DynamicAdvisedInterceptor.intercept'調用的,後者又創建了一個'CglibMethodInvocation'對象並且繼續調用它。所以從堆棧跟蹤點來看,我沒有看到任何區別。將嘗試BCEL方法。 – shrini1000 2012-03-21 03:09:52

+0

我嘗試了BCEL的'Repository.lookupClass(clazz)',其中clazz是CGLIB代理類對象。但我得到了以下異常:線程「main」中的異常java.lang.ClassNotFoundException:SyntheticRepository無法加載foo.Foo $$ EnhancerByCGLIB $$ 42857850 – shrini1000 2012-03-21 07:49:51

+0

我知道visualvm可以看穿Spring AOP代理(我必須在它之前對它們進行配置),我想試試看。 – 2012-03-21 14:06:07