簡體   English   中英

AOP是如何實現改變Java界面內容的?

[英]How is AOP being implemented to Change Java interface content?

我目前在我所在的項目中使用 Seasar2 框架。該框架在日本很受歡迎,但我在查找英文文檔時遇到問題。 即使在他們的官方英文翻譯網站上,他們也只是討論該框架使用依賴注入和 AOP。

我對他們在其中一個組件 S2Dao 中使用它的方式很感興趣。 基本上你只需要自動創建接口DAO class 和框架,在運行時更改代碼並創建中間調用的class 中間。 因此,數據庫事務代碼會自動添加到 class。 我想知道,有沒有一步一步的解釋這是如何完成的? java 可以在運行時更改代碼並在運行時更改方法嗎?

關於如何做到這一點有很好的參考嗎? 我只想知道框架是如何做到的。

是的,可以在運行時動態實現接口,也可以操作編譯的字節碼。

Java 提供了一種在運行時實現接口的內置機制,稱為動態代理類

還有像cglibjavassist這樣的優秀庫,它們不僅允許您實現接口,還允許您擴展類並在運行時操作字節碼(例如,更改方法的行為)。 像 Spring 和 Hibernate 這樣的框架使用這些庫來發揮它們的魔力,所以你的框架可能也在使用其中的一些。

注意:如果您好奇,這些庫可以“調整”字節碼,因為它們不使用 JVM 的默認 ClassLoader,而是使用自己的 ClassLoader 加載您的類,因此它們可以完全控制加載的 class 的每個單個字節,以及他們可以為所欲為:)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM