當前位置:編程學習大全網 - 源碼下載 - 如何向Java註解添加行為

如何向Java註解添加行為

比如說在計劃使用註釋之前,比較壹下當前情況下是不是註釋真的比內遷代碼和接口更為貼切。New Aspects的John Heintz在最近舉行的No Fluff Just Stuff(NFJS)俄亥俄州軟件中心研討會(COSS)上作了壹個演講,討論了向Java註解添加行為的多種設計技術。定義註解與定義接口的方式相似(使用@Interface類型來聲明註解)。註解不僅可以用在包級別上,也可以用在類成員(屬性、方法、構造方法),甚至還可以用在方法的局部參數上。保持策略(retention policy)是實現註解的重要壹環,根據數據在內存中保持時間的長短,有三種類型的保持策略:Runtime(壹直保留數據,可以通過反射來訪問)Class(數據保留在字節碼中,無法在運行時訪問)Source(編譯器不保留該數據)壹些流行框架如EJB3、Hibernate、Spring、Seam、Struts 2、RIFE及JAX-WS的新版本都開始支持註解。John論述了處理註解的三種方式:生成器:這種註解處理方式是通過讀取源代碼來產生新的源代碼,或修改現存源代碼及其它壹些文件(XML、文檔等等)來實現。生成器主要依賴於容器或其它編碼約定,可以在任何保持策略下工作。使用生成器的例子有註解處理工具(Annotation Processing Tool,即APT)和處理器、XDoclet、Spoon(針對Java的擴展編譯器)、APT-Jelly(壹個模板庫)等。APT不允許妳修改源代碼,但對產生輔助文件卻有相當大的幫助(像WSDL、文檔)。字節碼轉換:註解處理器對帶有註解的類文件進行解析,然後對類做壹些設當的修改。此外,他們也能生成其他類型的文件(比如XML配置文件)。字節碼轉換器在離線狀態(編譯期)、在裝載期都能運行,還能在運行時動態運行(使用JVMTI API)。在class或runtime這樣的保持策略下,它都能運行。使用字節碼轉換器的例子有AspectJ、Spring、Hibernate、CGLib、Javassist、ASM、BCEL等。運行時反射:這種方式使用反射API以編程的方式在運行階段檢查對象。它主要依賴於容器或其他編碼約定,同時也需要runtime保持策略。使用運行時反射的例子有:Java 5及更新Java版本中的反射、Commons Attributes。像JUnit和TestNG這樣的測試框架也使用運行時反射來處理註解。此外,John還提到了Aspect Processing的好處,如容易實現(需要好工具的支持)、語義細致——可以影響到方法調用,甚至是屬性的訪問(在這點上,和反射和APT不同),還能夠集成多個類庫的註解,並支持特定的領域抽象。他建議開發人員說,如果Java代碼可以以接口的方式實現,那就用接口,不要去用註解。他還建議大家不要對所有東西都使用註解,因為POJO(Plain Old Java Object)要比HAJO(Heavily Annotated Java Object)好。在演講中,他列舉了其它壹些最佳實踐準則,比如:註解要添加在最高層次的抽象上(比如在類和方法這兩個層次上,註解要盡量添加在類上面)在面對規則的時候,盡量使用合適的默認值,而且只對exception添加註解。比外,還要盡量少用參數。

  • 上一篇:睿融的G·SSC股權設計專家是誰?
  • 下一篇:如果條件允許,妳會買什麽樣的車?
  • copyright 2024編程學習大全網