<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Edzy_Java

      BlogJava :: 首頁 ::  ::  ::  :: 管理 ::
      58 隨筆 :: 12 文章 :: 11 評論 :: 0 Trackbacks
    目前最成熟、功能最豐富的AOP框架當數(shù)AspectJ,AspectJ已成為大多數(shù)其它框架跟從的標準。但是,AspectJ也走出了非同尋常的一步,它的實現(xiàn)為Java語言增添了新的關鍵詞。雖然新的語法并不難學,但卻意味著我們必須換一個編譯器,還要重新配制編輯器,只有這樣才能適應新的語法。在規(guī)模較大的開發(fā)組中,這些要求可能難以辦到,因為整個開發(fā)小組都會受到影響。由于語言本身的變化,開發(fā)小組把AOP技術(shù)引入到現(xiàn)有項目的學習周期隨之延長。

    ???
    現(xiàn)在我們需要的是這樣一個框架,它可以方便地引入,且不會對原來的開發(fā)和構(gòu)造過程產(chǎn)生任何影響。滿足這些要求的框架不止一個,例如JBoss AOP、NanningAspectwerkzAW)。本文選用的是Aspectwerkz,因為它可能是最容易學習的框架,也是最容易集成到現(xiàn)有項目的框架。

    ??? Aspectwerkz
    Jonas BonerAlexandre Vasseur創(chuàng)建,它是目前最快速、功能最豐富的框架之一。雖然它還缺乏AspectJ的某些功能,但己足以滿足大多數(shù)開發(fā)者在許多情形下的需要。

    ??? Aspectwerkz
    最令人感興趣的特性之一是它能夠以兩種不同的模式運行:聯(lián)機模式和脫機模式。在聯(lián)機模式下,AW直接干預屬于JVM的底層類裝入機制,截取所有的類裝入請求,對字節(jié)碼實施即時轉(zhuǎn)換。AW提供了干預類裝入過程的許多選項,另外還有一個替代bin/java命令的封裝腳本,這個腳本能夠根據(jù)Java版本和JVM能力自動生成一組可運行的配制。對于開發(fā)者,聯(lián)機模式有許多優(yōu)點,它能插入到任何類裝入器并在類裝入期間生成新的類。也就是說,我們不必手工修改應用程序的類,只要按通常的方式部署即可。不過,聯(lián)機模式要求對應用服務器進行額外的配制,有時這一要求可能很難滿足。

    ???
    在脫機模式下,生成類需要二個步驟。第一步是用標準的編譯器編譯,第二步是重點——以脫機模式運行AWcompiler編譯器,讓它處理新生成的類。編譯器將修改這些類的字節(jié)碼,根據(jù)一個XML文件的定義,在適當?shù)?span lang="EN-US">point-cut插入advice。脫機模式的優(yōu)點是AWcompiler生成的類能夠在任何JVM 1.3以上的虛擬機運行,本文下面要用的就是這種模式,因為它不需要對Tomcat作任何修改,只要對構(gòu)造過程稍作修改就可以照搬到大多數(shù)現(xiàn)有的項目。

    AspectWerkz 主要特性:

    ??? 1.運行時和加載時字節(jié)碼修正:你可以在運行時或編譯時輕松的改造任何(舊)應用程序或除了rt.jar以外的外部類庫

    ??? 2.支持join point模型

    ??? 3.支持Annotation:匹配JavaDocJSR-175,支持用戶自定義Annotation

    ??? 4.支持部署多個Aspect定義文件到部署的應用程序(WEB-INF/aop.xmlMETA-INF/aop.xml

    ??? 5Introduction/內(nèi)類型聲明(也稱Mixin),也就是具有添加接口和實現(xiàn)到已存在的類中的能力

    ??? 6Annotation定義:定義Aspect使用的運行時Annotation(為JSR-175準備)

    ??? 7XML定義:定義Aspect使用的XML;XML可以用來精煉、改寫和解析Annotation定義

    ??? 8.插件式Aspect管理器能夠和IoC框架(如SpringPicoContainer)一起工作

    ??? 9.四種不同的AdviceIntroduction部署模型(范圍):perJVM(單模式)、 perClassperInstance perThread

    ??? 10AdviceIntroduction能夠動態(tài)部署、反部署或重新部署

    ??? 11.高性能,使用JIT編譯

    ??? 12.使用Fine-grained模式語言選擇join point

    ??? 13.所有Advice能夠和所有的join point和各種混合類型的pointcut

    ??? 14.脫機變換(可以用作后處理器)

    ??? 15AspectAdviceIntroduction使用POJO編碼

    ??? 16.目標類可以是正規(guī)的POJO,也就是不需要接口

    ??? 17.支持通過定義傳遞參數(shù)給Advice和定義可重用的Advice堆棧

    ??? 18.元數(shù)據(jù)被加到類中

    ??? 19.簡單的用法和配置

    開始AOP

    1)這里我們要在屏幕打印出“Hello AOP!”,看如下代碼:

    //HelloAOP.java

    public class HelloAOP {

    ??? public static void main(String args[]) {

    ??????? HelloAOP ha = new HelloAOP();

    ??????? ha.test();

    ??? }

    ??? public void test() {

    ??????? System.out.println("Hello AOP!");

    ??? }

    }

    編譯HelloAOP.java文件:javac HelloAOP.java

    2)現(xiàn)在我要在輸出“Hello AOP!”前后做一些工作,這些工作在運行時會得到調(diào)用機會,如果使用AOP術(shù)語,我們可以說我們要編寫我們的aspect,這個aspect會在運行時被weave into (織入)HelloAOP class。

    //MyAspect.java

    import org.codehaus.aspectwerkz.joinpoint.JoinPoint;

    public class MyAspect {

    ??? public void beforeTesting(JoinPoint joinPoint) {

    ??? ????System.out.println("before testing...");

    ??? }

    ??? public void afterTesting(JoinPoint joinPoint) {

    ??????? System.out.println("after testing...");

    ??? }

    }

    javac MyAspect.java

    3)織入過程并不簡單,我們需要撰寫一個描述文件來將aspect和其織入的class中的信息聯(lián)系起來。

    //aop.xml

    <aspectwerkz>

    ??? <system id="AspectWerkzExample">

    ??????? <aspect class="MyAspect">

    ??????????????? <pointcut name="testMethod" expression="execution(* HelloAOP.test(..))"/>

    ??????????????? <advice name="beforeTesting" type="before" bind-to="testMethod"/>

    ????????????? ??<advice name="afterTesting" type="after" bind-to="testMethod"/>

    ??????? </aspect>

    ??? </system>

    </aspectwerkz>

    4)run it

    aspectwerkz -Daspectwerkz.definition.file=aop.xml HelloAOP

    //output:

    before testing...

    Hello AOP!

    after testing...

    Everything is fine!
    posted on 2006-11-15 17:02 lbfeng 閱讀(220) 評論(0)  編輯  收藏 所屬分類: AOP技術(shù)雜談

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲人成网站在线观看播放动漫| 日韩免费在线观看| 亚洲国产日韩一区高清在线| 国产日韩精品无码区免费专区国产| 免费国产a国产片高清网站| 亚洲欧美aⅴ在线资源| 女性自慰aⅴ片高清免费| 亚洲精品自偷自拍无码| 好爽好紧好大的免费视频国产| 亚洲人成色在线观看| 免费看国产一级特黄aa大片| 色妞www精品视频免费看| 亚洲国产成人久久综合一区77| 免费国产a理论片| 亚洲国产综合无码一区| 久久午夜无码免费| 亚洲欧洲国产经精品香蕉网| 成视频年人黄网站免费视频| 久久久久亚洲国产| 亚洲第一黄片大全| 国产免费一区二区视频| 亚洲欧洲日产专区| 国产hs免费高清在线观看| aaa毛片免费观看| 亚洲精品福利网泷泽萝拉| 成年美女黄网站色大免费视频| 亚洲AV永久无码精品放毛片| 亚洲日本中文字幕一区二区三区| 久久精品免费观看| 亚洲六月丁香婷婷综合| 免费jjzz在线播放国产| 久久国产精品免费网站| 亚洲精品一卡2卡3卡四卡乱码| 亚洲无码日韩精品第一页| 久久久久久久久久国产精品免费| 亚洲一区二区三区久久久久| 亚洲?v女人的天堂在线观看 | 亚洲精品天堂无码中文字幕| 亚洲黄片毛片在线观看| 99久热只有精品视频免费看| 亚洲AV成人影视在线观看|