亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Spring Framework中的面向方面編程(AOP),第一部分

2019-11-18 16:12:52
字體:
來源:轉載
供稿:網友

  作為這個介紹SPRing框架中的面向方面編程(aspect-Oriented Programming,AOP)的系列的第一部分,本文介紹了使您可以使用Spring中的面向方面特性進行快速開發的基礎知識。使用跟蹤和記錄方面(面向方面領域的HelloWorld)作為例子,本文展示了如何使用Spring框架所獨有的特性來聲明切入點和通知以便應用方面。本系列的第二部分將更深入地介紹如何運用Spring中的所有通知類型和切入點來實現更實用的方面和面向方面設計模式。對于AOP的更一般性的介紹,請查看ONjava站點上Graham O'Regan的文章,“IntrodUCtion to Aspect-Oriented Programming”。

  本文的目的不是要介紹構成模塊化J2EE系統——即Spring框架——的所有重要元素,我們將只把注意力放在Spring所提供的AOP功能上。由于Spring的模塊化設計方法,我們可以只使用該框架的AOP元素,而無需對構成Spring框架的其他模塊做太多考慮。

在AOP方面,Spring提供了什么?
  “它的目標不是提供最完善的AOP實現(雖然Spring AOP非常強大);而是要提供AOP實現與Spring IoC的緊密集成,以便幫助解決企業應用中的常見問題?!?br />Spring Framework參考文檔

  為了實現這個目標,Spring框架目前支持一組AOP概念,從切入點到通知。本文將展示如何使用Spring框架中所實現的如下AOP概念:

  • 通知(Advice):如何將before通知、afterReturning通知和afterThrowing通知聲明為bean。
  • 切入點(Pointcut):如何聲明靜態切入點邏輯以將xml Spring Bean Configuration文件中的所有內容聯系在一起。
  • Advisor關聯切入點定義與通知bean的方式。

設置場景:一個簡單的例子應用程序
  “一般而言,Spring并不是預描述的。雖然使用好的實踐非常容易,但是它避免強制推行一種特定的方法?!?br />Spring Framework參考文檔

  要試用Spring框架的AOP功能,首先我們要創建一個簡單的Java應用程序。IbusinessLogic接口和BusinessLogic類為Spring框架中的bean提供了簡易構件塊。雖然該接口對于我們的簡單應用程序邏輯來說不是必需的,但是它是Spring框架所推薦的良好實踐。

public interface IBusinessLogic{    public void foo();}public class BusinessLogic     implements IBusinessLogic{    public void foo()     {        System.out.println(        "Inside BusinessLogic.foo()");    }}

  可以編寫Mainapplication類,借此練習BusinessLogic bean的公有方法。

import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;public class MainApplication{    public static void main(String [] args)    {        // Read the configuration file        ApplicationContext ctx =           new FileSystemXmlApplicationContext(            "springconfig.xml");        //Instantiate an object        IBusinessLogic testObject =           (IBusinessLogic) ctx.getBean("businesslogicbean");        // Execute the public         // method of the bean        testObject.foo();    }}

  在BusinessLogic類及其關聯接口中沒有什么需要注意的。但是,MainApplication類初始化BusinessLogic對象的方式很有意思。通過使用ctx.getBean("businesslogicbean")調用,MainApplication將加載和管理BusinessLogic類的bean實例的任務轉交給了Spring框架。

  允許Spring控制BusinessLogic bean的初始化,這使得Spring運行時有機會在bean被返回給應用程序之前執行J2EE系統所需的所有與bean相關的管理任務。然后Spring運行時配置可以決定對bean應用哪些任務和模塊。該配置信息由一個XML文件提供,類似于下面所示的:

                     IBusinessLogic                                    


  該配置文件,即springconfig.xml,指定要加載一個接口與IbusinessLogic相匹配的bean。該bean隨后被關聯到BusinessLogic實現類。看起來好像是費了很大力氣只為了加載一個簡單的bean并調用一個方法,但是您要知道,這個配置文件只是使Spring框架可以透明地對應用程序應用其組件的眾多特性的一個體現。

  圖1顯示了基本的順序圖:MainApplication原樣執行,沒有應用方面。

Spring Framework中的面向方面編程(AOP),第一部分(圖一)
圖1.沒有對BusinessLogic bean應用方面時的順序圖

  請查看本文末尾處的參考資料,獲取這個簡單Spring應用程序的源代碼。

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

  方法跟蹤方面在一個目標應用程序內捕獲對所跟蹤的方法的調用以及方法的返回值,并以某種方式顯示這種信息。在AOP中,通知的before和after類型用于捕獲這些類型的聯結點,因為這兩種通知可以在方法調用聯結點之前或之后觸發。使用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() +           ")");    }}

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

  為了將通知與應用程序中的適當聯結點關聯起來,必須對springconfig.xml進行一些修改。

                     IBusinessLogic                                                      theTracingBeforeAdvisor            theTracingAfterAdvisor                                                                     .*         	                                          .*            


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

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

  • .*該表達式選擇advisor所關聯到的一個或多個bean上的所有聯結點。
  • ./IBusinessLogic/.foo該表達式只選擇IbusinessLogic接口上的foo()方法的聯結點。如果是advisor所關聯到的bean,則該表達式只選擇IBusinessLogic接口上的聯結點。

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

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

  Spring Framework中的面向方面編程(AOP),第一部分(圖二)
圖2. 方法跟蹤方面應用到BusinessLogic bean之后的順序圖(單擊圖像查看大圖)

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

方面的重用
  可以對方法跟蹤方面進行擴展,提供一個稍微復雜的記錄(Logging)方面。記錄方面提供了一個很不錯的重用例子,因為記錄方面所需的許多特性都已經包含在方法跟蹤方面中了。

  在本例中,記錄方面擴展了方法跟蹤方面,以便顯示附加的與(在應用程序的執行過程中)所引發的異常有關的信息。

  要完全使用記錄方面,需要對應用程序做一些更改。BusinessLogicException異常類提供了一個可以由IBusinessLogicInterface接口和BusinessLogic實現類新增的void bar()方法引發的異常。

public class BusinessLogicException    extends Exception{}public interface IBusinessLogic{    public void foo();       public void bar()       throws BusinessLogicException;}public class BusinessLogic    implements IBusinessLogic{    public void foo()     {        System.out.println(          "Inside BusinessLogic.foo()");    }         public void bar()        throws BusinessLogicException    {        System.out.println(        "Inside BusinessLogic.bar()");          throw new BusinessLogicException();    }}

  MainApplication類現在將對void bar()方法進行一次額外的調用,并處理選中的、可能由該方法引發的異常。

import org.springframeworkcontext.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;public class MainApplication{    public static void main(String [] args)    {        // Read the configuration file        ApplicationContext ctx =          new FileSystemXmlApplicationContext(            "springconfig.xml");       //Instantiate an object       IBusinessLogic testObject =           (IBusinessLogic) ctx.getBean(            "businesslogicbean");       //Execute the public methods of the bean       testObject.foo();             try       {           testObject.bar();       }       catch(BusinessLogicException ble)       {           System.out.println(             "Caught BusinessLogicException");       }    }}

  來自方法跟蹤方面的TracingBeforeAdvice和TracingAfterAdvice通知可以整體重用。LoggingThrowsAdvice類為新的異常記錄提供了通知。

import org.springframework.aop.ThrowsAdvice;import java.lang.reflect.Method;public class LoggingThrowsAdvice    implements ThrowsAdvice{    public void afterThrowing(Method method,                             Object[] args,                             Object target,                             Throwable subclass)    {       System.out.println(         "Logging that a " +          subclass +          "Exception was thrown.");    }}


  應用記錄方面的最后一步是修改springconfig.xml配置文件,使其包含新添加的LoggingThrowsAdvice通知。

  圖3顯示了運行MainApplication并使用Spring框架應用了記錄方面的UML順序圖。

  Spring Framework中的面向方面編程(AOP),第一部分(圖三)
圖3. 記錄方面應用到BusinessLogic bean之后的順序圖(單擊圖像查看大圖)

  此處的記錄方面清楚地說明了如何重用現有方面以及如何在Spring框架中使用通知的throws形式。通過為before和after通知聲明新的通知來重寫現有的方法跟蹤方面實現,可以實現更復雜的記錄方面,記錄到更復雜的記錄框架,比如LOG4J。關于記錄方面和例子應用程序的源代碼,請參見本文末尾的參考資料小節。

結束語
  本文展示了使用Spring框架中的基本AOP結構所應用的一些簡單方面。在本系列的下一篇文章中,我們將介紹一些更實用的方面,探討方面的生命周期,使用Spring框架的around通知,并使用Spring來應用AOP模式。

  參考資料

  • 本文的源代碼
  • Spring Java/J2EE Framework
  • Spring AOP Framework
  • "Introduction to Aspect-Oriented Programming"

  原文出處:An Introduction to Aspect-Oriented Programming with the Spring Framework, Part 1http://www.onjava.com/pub/a/onjava/2004/07/14/springaop.Html

Spring Framework中的面向方面編程(AOP),第一部分(圖四)
 作者簡介Russell Miles是General Dynamics UK公司的一名軟件工程師,他負責Java和分布式系統,但是他目前主要的興趣在面向方面領域,尤其是AspectJ。

(出處:http://www.49028c.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97香蕉超级碰碰久久免费的优势| 色琪琪综合男人的天堂aⅴ视频| 欧美一级免费看| 久久久精品999| 国产日韩欧美成人| 欧美成人黄色小视频| 一道本无吗dⅴd在线播放一区| 亚洲人精选亚洲人成在线| 亚洲电影免费观看高清完整版| 久久这里有精品| 久久久久久久久久久av| 永久免费毛片在线播放不卡| 91久久久久久久久久久| 亚洲欧美日韩综合| 欧洲亚洲免费在线| 午夜欧美大片免费观看| 日韩毛片在线看| 国产91在线视频| 77777亚洲午夜久久多人| 精品国产老师黑色丝袜高跟鞋| 日韩极品精品视频免费观看| 亚洲国产精彩中文乱码av在线播放| 国产成人精品av| 欧美成人久久久| 国产精品一区二区三区免费视频| 国产精品永久免费在线| 国产日韩中文在线| 国产日韩欧美综合| 青草青草久热精品视频在线观看| 欧美视频一二三| 日韩精品福利网站| 国产69精品久久久久99| 国内精品久久久久伊人av| 日韩美女av在线免费观看| 91国内产香蕉| 日韩高清a**址| 日韩欧美精品在线观看| 精品国偷自产在线视频| 国产欧美日韩精品专区| 国产精品久久久久久久久久三级| 91九色视频导航| 亚洲精品网站在线播放gif| 日本国产一区二区三区| 欧美壮男野外gaytube| 亚洲免费福利视频| 91久久精品国产91久久性色| 亚洲无亚洲人成网站77777| 国产精品视频区| 456国产精品| 亚洲精品成a人在线观看| 97国产精品视频| 深夜精品寂寞黄网站在线观看| 欧美日本国产在线| 精品国产成人在线| 久久九九全国免费精品观看| 欧美日韩久久久久| 亚洲国产成人一区| 欧美日韩中文在线| 国产一区欧美二区三区| 国产欧美亚洲视频| 全亚洲最色的网站在线观看| 国产欧美一区二区| 国产91免费观看| 插插插亚洲综合网| 亚洲精品自拍视频| 日韩美女在线观看一区| 另类天堂视频在线观看| 亚洲天堂成人在线| 亚洲天堂久久av| 欧美性xxxxxxxxx| 97视频免费在线看| 欧美日韩精品在线播放| www.亚洲免费视频| 亚洲免费电影一区| 日韩免费不卡av| 国产成人aa精品一区在线播放| 成人高h视频在线| 欧美一区二区三区精品电影| 91sao在线观看国产| 欧美精品aaa| 亚洲国产成人精品久久久国产成人一区| 亚洲3p在线观看| 日韩欧美国产高清91| 91热精品视频| 日韩免费在线观看视频| 亚洲欧洲午夜一线一品| 国产免费亚洲高清| 最新国产精品亚洲| 国产午夜精品久久久| 亚洲男人天堂2024| 97色在线观看免费视频| 日产日韩在线亚洲欧美| 国内成人精品一区| 欧美丰满少妇xxxxx做受| 国产日韩在线免费| 国产欧美精品一区二区三区-老狼| 国产精品久久视频| 日本乱人伦a精品| 一区二区三区无码高清视频| 欧美xxxx14xxxxx性爽| 日韩av电影在线免费播放| 久热国产精品视频| 日本中文字幕不卡免费| 亚洲综合自拍一区| 久久精品电影一区二区| 国产精品影片在线观看| 国产精品亚洲片夜色在线| 国产精品wwww| 亚洲色图色老头| 国产成人久久精品| 97国产一区二区精品久久呦| 成人久久一区二区三区| 国产在线观看精品一区二区三区| 国产亚洲欧洲黄色| 国产精品男人爽免费视频1| 日韩成人在线视频| 久久欧美在线电影| 最近的2019中文字幕免费一页| 国产美女高潮久久白浆| 日韩小视频在线| 色综合久久精品亚洲国产| 日韩精品在线影院| 国产精品久久久久久久久久99| 国产精品中文在线| 日韩高清不卡av| 国产精品久久久久久亚洲影视| 欧美大尺度在线观看| 国产999精品| 午夜精品国产精品大乳美女| 最近2019年日本中文免费字幕| 国产精品高潮视频| 亚洲人成在线免费观看| 欧美极品第一页| 91网站免费观看| 欧美性在线视频| 不卡av电影在线观看| 欧亚精品中文字幕| 疯狂欧美牲乱大交777| 欧美另类精品xxxx孕妇| 欧美麻豆久久久久久中文| 亚洲欧洲国产精品| 久久久免费在线观看| 欧美日韩国产区| 精品中文字幕视频| 国产精品99蜜臀久久不卡二区| 国产主播在线一区| 国产精品毛片a∨一区二区三区|国| 国产亚洲aⅴaaaaaa毛片| 国产精品第2页| www高清在线视频日韩欧美| 亚洲国产精品yw在线观看| 国产精品高潮呻吟久久av野狼| 国产精品com| 8x海外华人永久免费日韩内陆视频| 一区二区三区高清国产| 国产精品999999| 日韩欧美精品网站| 午夜精品一区二区三区在线| 91免费看片在线| 色综合91久久精品中文字幕| 欧美另类暴力丝袜| 欧洲成人在线观看| 国产剧情日韩欧美| 亚洲精品视频在线播放|