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

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

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

    Open Java Project

    Keep it simple, Stupid, Less is more

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      20 Posts :: 0 Stories :: 12 Comments :: 0 Trackbacks

    1、開發(fā)環(huán)境

    l         Eclipse 3.0.1

    l         AspectWerkz2.0 RC2http://aspectwerkz.codehaus.org/releases.html

    l         AspectWerkz Eclipse plugin 2.0.4http://aspectwerkz.codehaus.org/downloads/eclipse

     

    2、對工程使能AspectWerkz

    l         創(chuàng)建普通的Java工程:AWHello

    l         右擊工程名,選擇Enable AspectWerkz AOP使能AspectWerkz

    l         Error Log視圖中可以查看插件產生的跟蹤信息

     

    3、添加依賴的JAR

    目前的插件不會自動添加依賴的AspectWerkz JAR文件到工程中,需要手工添加,這些JAR文件包括(可以在AspectWerkz2.0 RC2lib目錄下找到):

    l         aspectwerkz-2.0.RC2.jar

    l         aspectwerkz-core-2.0.RC2.jar

    l         aspectwerkz-jdk14-2.0.RC2.jarJDK1.4)或aspectwerkz-jdk5-2.0.RC2.jarJDK1.5

    l         concurrent-1.3.1.jar

    l         dom4j-1.4.jar

    l         jarjar-0.3.jar

    l         jrexx-1.1.1.jar

    l         piccolo-1.03.jar

    l         qdox-1.4.jar

    l         trove-1.0.2.jar


     

    4、創(chuàng)建測試程序

    package foo;
     
    public class HelloWorld {
     
        public static void main(String args[]) {
            HelloWorld world = new HelloWorld();
            world.greet();
        }
     
        public void greet() {
            System.out.println("Hello World!");
        }
    }

     

    5、編寫Aspect

    package foo;
     
    import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
     
    public class MyAspect {
     
        public void beforeGreeting(JoinPoint joinPoint) {
            System.out.println("before greeting...");
        }
     
        public void afterGreeting(JoinPoint joinPoint) {
            System.out.println("after greeting...");
        }
    }

    l         MyAspect類包含了用來編織到HelloWorld類中的代碼

    l         注意:Aspect方法必須包含JoinPoint參數(shù)

     

    6AOP編織(weaving

    l         使用META-INF/aop.xml來定義Aspect(通常位于工程的/src目錄下)

    <!DOCTYPE aspectwerkz PUBLIC "-//AspectWerkz//DTD//EN" "http://aspectwerkz.codehaus.org/dtd/aspectwerkz2.dtd">
    <aspectwerkz>
        <system id="AWHello">
            <package name="foo">
                    <aspect class="MyAspect">
                           <pointcut name="greetMethod" 
                             expression="execution(* foo.HelloWorld.greet(..))"/>
                           <advice name="beforeGreeting" type="before" 
                             bind-to="greetMethod"/>
                           <advice name="afterGreeting" type="after" 
                             bind-to="greetMethod"/>
                    </aspect>
            </package>
        </system>
    </aspectwerkz>

    l         <package>標記:指定Aspect類所在的包路徑

    l         <aspect>標記:指定Aspect

    l         <pointcut>標記:指定在哪里插入Aspect方法(Pointcut

    ?         該方法只是用來綁定后面<advice>標記指定的 Advice

    ?         expression屬性:必須是符合Join point選擇模式語言的有效表達式,并且要確保全路徑的類名包含到模式中

    l         <advice>標記:指定要插入的Aspect方法(Advice

    ?         name屬性:指定Aspect類中對應的方法名

    ?         type屬性:指定Advice類型,可以是beforeafteraround

    ?         bind-to屬性:指定綁定的Pointcut

    l         這個例子是在HelloWorld.greet()方法調用之前插入MyAspect.beforeGreeting()方法;在HelloWorld.greet()方法返回之后插入MyAspect.afterGreeting()方法

    l         在保存文件時,觸發(fā)Eclipse Build時,同樣會觸發(fā)基于有效META-INF/aop.xml文件或在Aspect中定義、被編譯的Annotation(后面講述)的AOP編織

     

    7AOP交叉視圖支持

    l         AOP編織發(fā)生后,會在Advice應用的地方使用右指向標記來標記

    l         點擊該標記,顯示Quick fix提示,包括該Join point處應用的Advice及其類型

    l         點擊具體Advice,會定位到該Advice的源代碼處

    l         對于當前插件,修改Aspect類不會更新標記處的信息

    l         可以通過修改目標文件或手工執(zhí)行clean build來實現(xiàn)更新



     

    8、運行程序

    l         首先要在工程build path中添加依賴的tools.jarJAVA_HOME/lib/tools.jar

    l         選擇Run > Run...

    l         在左邊列表中選擇AspectWerkz Application,點擊New按鈕

    l         后面就按正規(guī)應用程序的方法運行

    l         本例的運行結果是:

    before greeting...
    Hello World!
    after greeting...

     

    9Annotations支持

    l         Annotations提供了一種在Aspect類中添加元數(shù)據(jù)的方法,而不是在分離的文件(aop.xml)中指定

    l         本插件包含了AspectWerkz Java 1.4 Annotation編譯器,

    l         Aspect類源代碼編譯時,Annotations也會被編譯

    l         可以在Aspect類中使用JavaDoc風格的注釋定義AnnotationsJDK 1.4),下面是一個使用AnnotationsAspect類:

    package foo;
     
    import org.codehaus.aspectwerkz.joinpoint.StaticJoinPoint;
     
    public class MyAspectWithAnnotations {
     
              /**
               * @Before execution(* foo.HelloWorld.greet(..))
               */
               public void beforeGreeting(StaticJoinPoint joinPoint) {
                   System.out.println("before greeting with annotation...");
               }
     
              /**
               * @After execution(* foo.HelloWorld.greet(..))
               */
               public void afterGreeting(StaticJoinPoint joinPoint) {
                   System.out.println("after greeting with annotation...");
               }
    }

    l         對于AspectWerkz 2.x版本,這里可以使用StaticJoinPoint來替代JoinPoint,以優(yōu)化性能

    l         使用Annotations意味著不需要在aop.xml中描述Aspect的細節(jié),但是仍然需要指定Aspect類:

    <!DOCTYPE aspectwerkz PUBLIC "-//AspectWerkz//DTD//EN" "http://aspectwerkz.codehaus.org/dtd/aspectwerkz2.dtd">
    <aspectwerkz>
        <system id="AWHello">
            <package name="foo">
                    <aspect class="MyAspect">
                           <pointcut name="greetMethod" 
                             expression="execution(* foo.HelloWorld.greet(..))"/>
                           <advice name="beforeGreeting" type="before" 
                             bind-to="greetMethod"/>
                           <advice name="afterGreeting" type="after" 
                             bind-to="greetMethod"/>
                    </aspect>
            </package>
            <aspect class="foo.MyAspectWithAnnotations"/>
        </system>
    </aspectwerkz>

    l         重新運行的結果如下:

    before greeting with annotation...
    before greeting...
    Hello World!
    after greeting...
    after greeting with annotation...

     

    posted on 2005-03-21 22:37 nelson_tu 閱讀(1342) 評論(0)  編輯  收藏 所屬分類: AOP

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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲精品动漫人成3d在线 | 午夜时刻免费入口| 亚洲av无码偷拍在线观看| 黄色一级视频免费| 亚洲精品无码乱码成人| 国产大片线上免费观看 | 18成禁人视频免费网站| 无码亚洲成a人在线观看| 香蕉视频在线观看亚洲| 日本免费v片一二三区| 亚洲啪AV永久无码精品放毛片| 伊人久久亚洲综合影院| 特级毛片爽www免费版| 久久精品国产精品亚洲毛片| 国产免费人成视频在线观看| 看一级毛片免费观看视频| 亚洲天堂久久精品| 亚洲国产精品碰碰| 日本XXX黄区免费看| 中文无码成人免费视频在线观看| 亚洲精品色播一区二区| 日本亚洲成高清一区二区三区| 日韩免费无砖专区2020狼| 在线成人爽a毛片免费软件| 无遮挡免费一区二区三区| 久久久国产亚洲精品| 亚洲国产一区二区三区青草影视| mm1313亚洲精品国产| 国产日本一线在线观看免费| 黄网站色视频免费在线观看的a站最新| 亚洲色精品三区二区一区| 综合自拍亚洲综合图不卡区| 天堂在线免费观看中文版| 全部免费毛片在线播放| 亚洲熟妇丰满xxxxx| 亚洲av日韩av不卡在线观看 | 亚洲av日韩av天堂影片精品| 免费亚洲视频在线观看| 18禁成年无码免费网站无遮挡| 99蜜桃在线观看免费视频网站| 国产免费福利体检区久久|