2012-07-17 44 views

回答

4

如果您使用的是基於接口的代理(默認),Spring使用Proxy類來動態創建代理和內存。沒有與該類關聯的.class文件。

當使用基於類的代理(通過)春爲您創建類的具體子類。在調試器中,您會注意到它們被命名爲YourRealService$$EnhancerByCGLIB$$...但這些類只能在內存中生成,而不是存儲在磁盤上。

如果你真的想看到引擎蓋下的AOP,你將不得不使用和編譯時編織。工作太多了。所以底線是:只要相信他們的工作。如果他們不:檢查堆棧跟蹤。

+0

感謝您的精彩講解了很多托馬斯。我會相信他們的工作:)我的腦海裏還有一個問題。爲什麼很多人說在使用AOP的時候應該考慮內存約束,因爲AOP會創建子類。它是否正確?即使AOP創建類,它只使用代理的類,而不是我們創建的類。 – 2012-07-17 10:27:09

+0

@KhalidAnsari:很多動態生成的類的(我不認爲這也適用於通過'Proxy'創建動態代理)將佔據PermGen的空間(未堆)。我從來沒有遇到任何問題,但請記住這一點。 – 2012-07-17 11:03:15