建体彩网|中彩网双色球连号|
?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

新蒲京澳門賭場網站:Spring Framework中的面向方面編程(AOP),第一部分

?

作為這個先容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的慎密集成,以便贊助辦理企業利用中的常見問題。”

Spring Framework參考文檔

為了實現這個目標,Spring框架今朝支持一組AOP觀點,從切入點到看護。本文將展示若何應用Spring框架中所實現的如下AOP觀點:

看護(Advice):若何將before看護、afterReturning看護和afterThrowing看護聲明為bean。

切入點(Pointcut):若何聲明靜態切入點邏輯以將XML Spring Bean Configuration文件中的所有內容聯系在一路。

Advisor:關聯切入點定義與看護bean的要領。

設置場景:一個簡單的例子利用法度榜樣

“一樣平常而言,Spring并不是預描述的。雖然應用好的實踐異常輕易,然則它避免強制執行一種特定的措施。”

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.prin新蒲京澳門賭場網站tln(

"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原樣履行,沒有利用方面。

圖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所示。

圖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順序圖。

圖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

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

建体彩网
澳洲幸运8开奖记录 彩友网网址 广西快乐双彩开奖彩控 足球比分直播90 去法国赚钱 3d什么叫组三组六 三肖中特 吉林十一选五 刮刮乐可看透的技巧 大乐透专家预测