熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Spring3.0中的AOP配置方法

2013-11-23 20:41:30  來源: Java開源技術 

  第一種配置方法使用@AspectJ標簽

  在配置文件中添加注解

  創建一個Java文件使用@Aspect注解修飾該類

  創建一個方法使用@Before@After@Around等進行修飾在注解中寫上切入點的表達式

  說明上述Java文件創建好後需要將其在Spring的容器中進行聲明可以在配置文件中定義節點也可以使用@Component組件進行修飾

  示例

  Java代碼

  import orgaspectjlangProceedingJoinPoint;

  import orgaspectjlangannotationAfter;

  import orgaspectjlangannotationAfterThrowing;

  import orgaspectjlangannotationAround;

  import orgaspectjlangannotationAspect;

  import orgaspectjlangannotationBefore;

  import orgspringframeworkstereotypeComponent;

  /**

  * 基於注解的AOP日志示例

  * @author ZYWANG

  */

  @Component

  @Aspect

  public class AopLog {

  //方法執行前調用

  @Before(execution (* comzywangservicesimpl**()))

  public void before() {

  Systemoutprintln(before);

  }

  //方法執行後調用

  @After(execution (* comzywangservicesimpl**()))

  public void after() {

  Systemoutprintln(after);

  }

  //方法執行的前後調用

  @Around(execution (* comzywangservicesimpl**()))

  public Object around(ProceedingJoinPoint point) throws Throwable{

  Systemoutprintln(begin around);

  Object object = pointproceed();

  Systemoutprintln(end around);

  return object;

  }

  //方法運行出現異常時調用

  @AfterThrowing(pointcut = execution (* comzywangservicesimpl**())throwing = ex)

  public void afterThrowing(Exception ex){

  Systemoutprintln(afterThrowing);

  Systemoutprintln(ex);

  }

  }

  上面這段代碼中多次使用了重復的切入點這種情況下可以使用@Pointcut標注來修改一個切入點方法(這個方法不需要參數和方法體)然後就可以在@Before等標注中引用該方法作為切入點示例如下

  Java代碼

  import orgaspectjlangProceedingJoinPoint;

  import orgaspectjlangannotationAround;

  import orgaspectjlangannotationAspect;

  import orgaspectjlangannotationBefore;

  import orgaspectjlangannotationPointcut;

  import orgspringframeworkstereotypeComponent;

  /**

  * 基於注解的AOP日志示例

  * @author ZYWANG

  */

  @Component

  @Aspect

  public class AopLog {

  @Pointcut(execution (* comiflysseschoolservicesimpl**()))

  public void pointcut(){}

  //方法執行前調用

  @Before(pointcut())

  public void before() {

  Systemoutprintln(before);

  }

  //方法執行的前後調用

  @Around(pointcut())

  public Object around(ProceedingJoinPoint point) throws Throwable{

  Systemoutprintln(begin around);

  Object object = pointproceed();

  Systemoutprintln(end around);

  return object;

  }

  }

  第二種配置方法基於配置文件的配置

  創建一個Java文件並指定一個用於執行攔截的方法該方法可以有個或多個參數

  在Spring配置文件中注冊該Java類為一個Bean

  使用等標簽進行配置

  示例

  Java文件

  Java代碼

  import orgaspectjlangProceedingJoinPoint;

  /**

  * 基於配置文件的AOP日志示例

  * @author ZYWANG

  */

  public class AopLog {

  //方法執行的前後調用

  public Object runOnAround(ProceedingJoinPoint point) throws Throwable{

  Systemoutprintln(begin around);

  Object object = pointproceed();

  Systemoutprintln(end around);

  return object;

  }

  }

  Spring配置文件

  Xml代碼

  注意上面這個示例使用的是around方式的攔截該方法要求Java類中的方法有一個ProceedingJoinPoint類型的參數

  使用第二種方式的AOP配置在Eclipse(有SpringIDE插件)中被攔截到的方法中有標識顯示


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28907.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.