乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Spring Framework中的AOP編程之入門篇 2

       im056 2008-01-28

      Spring Framework中的AOP編程之入門篇

      2005-12-26 15:30 作者: Russell Miles 出處: bea 責任編輯:方舟
        應(yīng)用方法跟蹤(Method Tracing)方面

        可能最基本的方面就是方法跟蹤方面了。這可能是您找得到的最簡單的方面了,因此它是研究新的AOP實現(xiàn)的一個很好的起點。

        方法跟蹤方面在一個目標應(yīng)用程序內(nèi)捕獲對所跟蹤的方法的調(diào)用以及方法的返回值,并以某種方式顯示這種信息。在AOP中,通知的before和after類型用于捕獲這些類型的聯(lián)結(jié)點,因為這兩種通知可以在方法調(diào)用聯(lián)結(jié)點之前或之后觸發(fā)。使用Spring框架,方法跟蹤方面的before通知是在TracingBeforeAdvice類中聲明的。

      import java.lang.reflect.Method;
      import org.springframework.aop. MethodBeforeAdvice;

      public class TracingBeforeAdvice
      implements MethodBeforeAdvice
      {
       public void before(Method m, Object[] args, Object target)
       throws Throwable
       {
        System.out.println("Hello world! (by " + this.getClass().getName() + ")");
       }
      }

        類似地,after通知可以在TracingAfterAdvice類中聲明。

      import java.lang.reflect.Method;
      import org.springframework.aop.AfterReturningAdvice;

      public class TracingAfterAdvice
      implements AfterReturningAdvice
      {
       public void afterReturning(Object object, Method m, Object[] args, Object target)
       throws Throwable
       {
        System.out.println("Hello world! (by " + this.getClass().getName() + ")");
       }
      }

        這兩個類都通過實現(xiàn)Spring框架的適當通知接口而表示了特定的通知。每種類型的通知都指定實現(xiàn)before(..)或afterReturning(..)方法,以便使Spring運行時可以告訴通知適當?shù)穆?lián)結(jié)點會在何時出現(xiàn)。值得注意的是,TracingAfterAdvice實際上是從AfterReturningAdvice擴展而來的,表示只有在聯(lián)結(jié)點在無異常的情況下獲得返回值時才運行通知。

        為了將通知與應(yīng)用程序中的適當聯(lián)結(jié)點關(guān)聯(lián)起來,必須對springconfig.xml進行一些修改。

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE beans PUBLIC
      "-//SPRING//DTD BEAN//EN"
      "http://www./dtd/spring-beans.dtd">

      <beans>

      <!-- Bean configuration -->
      <bean id="businesslogicbean"
      class="org.springframework.aop.framework.ProxyFactoryBean">
      <property name="proxyInterfaces">
      <value>IBusinessLogic</value>
      </property>
      <property name="target">
      <ref local="beanTarget"/>
      </property>
      <property name="interceptorNames">
      <list>
      <value>theTracingBeforeAdvisor</value>
      <value>theTracingAfterAdvisor</value>
      </list>
      </property>
      </bean>
      <!-- Bean Classes -->
      <bean id="beanTarget"
      class="BusinessLogic"/>

      <!-- Advisor pointcut definition for before advice -->
      <bean id="theTracingBeforeAdvisor"
      class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
      <property name="advice">
      <ref local="theTracingBeforeAdvice"/>
      </property>
      <property name="pattern">
      <value>.*</value>
      </property>
      </bean>

      <!-- Advisor pointcut definition for after advice -->
      <bean id="theTracingAfterAdvisor"
      class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
      <property name="advice">
      <ref local="theTracingAfterAdvice"/>
      </property>
      <property name="pattern">
      <value>.*</value>
      </property>
      </bean<

      <!-- Advice classes -->
      <bean id="theTracingBeforeAdvice"
      class="TracingBeforeAdvice"/>
      <bean id="theTracingAfterAdvice"
      class="TracingAfterAdvice"/>

      </beans>

        theTracingBeforeAdvisor和theTracingAfterAdvisor advisor被添加到前面所聲明的businesslogicbean。每個advisor都可能截獲所有bean所關(guān)聯(lián)到的聯(lián)結(jié)點。Advisor本身就是bean,而它唯一的作用就是將切入點定義與通知bean關(guān)聯(lián)起來。本例中的切入點定義是在靜態(tài)對象層次結(jié)構(gòu)中指定相關(guān)聯(lián)結(jié)點的正則表達式。

        因為本例中使用了org.springframework.aop.support.RegexpMethodPointcutAdvisor切入點advisor,切入點邏輯是使用正則表達式指定的。正則表達式用于識別公有接口對IbusinessLogici接口的聯(lián)結(jié)點。下面是一些可以用來指定IBusinessLogic接口上的不同聯(lián)結(jié)點集合的正則表達式例子:

      <value>.*</value>:該表達式選擇advisor所關(guān)聯(lián)到的一個或多個bean上的所有聯(lián)結(jié)點。
      <value>./IBusinessLogic/.foo</value>:該表達式只選擇IbusinessLogic接口上的foo()方法的聯(lián)結(jié)點。如果是advisor所關(guān)聯(lián)到的bean,則該表達式只選擇IBusinessLogic接口上的聯(lián)結(jié)點。

        springconfig.xml文件中最后的bean聲明指定實現(xiàn)通知bean的類。

        既然已經(jīng)指定了跟蹤方面的正確配置,那么下一次執(zhí)行MainApplication時,這些方面就會在初始化過程中被編織進去,而BusinessLogic bean中的所有方法都將被跟蹤,如圖2所示。

      Click for larger view

      圖2. 方法跟蹤方面應(yīng)用到BusinessLogic bean之后的順序圖(單擊圖像查看大圖)

        方法跟蹤方面和例子應(yīng)用程序的源代碼可在本文末尾的參考資料小節(jié)進行下載。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多