3AOP實現機制
根據來自于AOSD(Aspect-OrientedSoftwareDevelopment,http://aosd.net)的統計,目前與AOP相關的項目已達近百種,而基于Java的AOP實現機制也有二十多種,以下所列舉的是商業上得到成熟應用的幾種基于Java的AOP的實現機制。
3.1AspectJ
AspectJ是目前最完善的AOP語言,由AOP的首倡者GregorKiczales領導的一個小組提出并得到發展。AspectJ是對Java編程語言的擴展,通過增加了一些新的構造塊支持對橫切關注點的模塊化封裝,通過對源代碼級別的代碼混合實現織入,是一種典型的使用靜態織入的AOP實現機制。AspectJ提供了兩種橫切實現機制,一種稱為動態橫切(DynamicCrosscutting),另一種稱為靜態橫切(StaticCrosscutting)。
動態橫切是指在程序執行的某一個明確的點上運行額外的,預先定義好的實現,是一種靜態實現機制,并非是動態的。為了實現動態橫切,AspectJ中引入了四個新的概念:連接點(JoinPoint),切入點(Pointcut),參考(Advice)和方面(Aspect)。連接點是明確定義的程序執行過程中的一個點,切入點則是指一組相關的連接點,參考定義了在連接點執行的額外實現,方面則是指對橫切關注點的模塊化封裝實現的單元,類似于AOP中的類,由切入點,參考與普通的Java成員聲明組成。如前所述,連接點是程序執行中明確定義的點,比如,類接受到方法調用時,方法調用時,屬性訪問時都是連接點的例子,在連接點處可以執行預定義的額外實現。而要指明在哪些連接點上執行,則需要定義切入點,切入點可以在程序運行時匹配特定的連接點,AspectJ中預定義了一系列標準切入點,包括方法與構造器的調用,接受調用,執行,域的get,set訪問,異常處理,實例類型匹配,處于類或方法體中,控制流中,調用者調用方法,類型的初始化與靜態初始化,通過這些預定義切入點的組合可以實現自定義的、復雜的切入點。在編譯時,方面中的參考將被轉化為標準的方法,類代碼中匹配切入點的連接點將被轉化為一個靜態的標記點,然后,這些靜態的點將被對參考所轉化成的方法的調用所取代,由此完成兩種代碼的織入,最后對織入完成的代碼編譯為字節碼,即完成了整個編譯過程。目前,AspectJ即支持編譯前的預處理方式實現代碼的織入,也支持編譯后的字節碼操作。
文章來源于領測軟件測試網 http://www.kjueaiud.com/