<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 首頁 新隨筆 聯系 聚合 管理
      20 Posts :: 0 Stories :: 12 Comments :: 0 Trackbacks

    1、開發環境

    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         創建普通的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、創建測試程序

    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參數

     

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

     

    7AOP交叉視圖支持

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

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

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

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

    l         可以通過修改目標文件或手工執行clean build來實現更新



     

    8、運行程序

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

    l         選擇Run > Run...

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

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

    l         本例的運行結果是:

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

     

    9Annotations支持

    l         Annotations提供了一種在Aspect類中添加元數據的方法,而不是在分離的文件(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,以優化性能

    l         使用Annotations意味著不需要在aop.xml中描述Aspect的細節,但是仍然需要指定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

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲AV成人无码久久精品老人| 亚洲人和日本人jizz| 99热在线日韩精品免费| 亚洲av色福利天堂| 欧美最猛性xxxxx免费| 一级特黄aa毛片免费观看| 亚洲一区二区三区播放在线| 国产免费AV片无码永久免费| 中国内地毛片免费高清| 亚洲午夜国产精品| 亚洲国产精品一区二区九九| 久久久精品2019免费观看| 国产精品自拍亚洲| 亚洲a在线视频视频| 四虎免费久久影院| 2015日韩永久免费视频播放| www成人免费视频| 亚洲AV无码专区在线亚| 国产亚洲一区二区精品| 国产高清在线免费| 中文字幕免费在线看线人| 亚洲精品国产字幕久久不卡| 性一交一乱一视频免费看| 青柠影视在线观看免费高清| 亚洲色成人四虎在线观看| 国产最新凸凹视频免费| 99热在线观看免费| 国产成人无码免费看片软件| 亚洲日韩精品国产3区| 亚洲精品综合一二三区在线| 亚洲精品综合久久| 妞干网在线免费视频| 久久午夜伦鲁片免费无码| 一级做a爰片久久毛片免费陪| 亚洲婷婷天堂在线综合| 亚洲国产精品一区二区成人片国内 | 鲁丝片一区二区三区免费| 粉色视频在线观看www免费| 亚洲videos| 久久久亚洲欧洲日产国码是AV| 亚洲无线观看国产精品|