1. 程式人生 > >Spring 中基於 AOP 的 @AspectJ註解例項

Spring 中基於 AOP 的 @AspectJ註解例項

@AspectJ 作為通過 Java 5 註釋註釋的普通的 Java 類,它指的是宣告 aspects 的一種風格。通過在你的基於架構的 XML 配置檔案中包含以下元素,@AspectJ 支援是可用的。

1.第一步:倒入jar包,跟上個例子包是一樣的

  • aspectjrt.jar

  • aspectjweaver.jar

  • aspectj.jar

  • aopalliance.jar

2.第二步:建立三個類  

  2.1這裡是 Logging.java 檔案的內容。這實際上是 aspect 模組的一個示例,它定義了在各個點呼叫的方法。

 1 package com.spring.aop2;
 2 
 3 import org.aspectj.lang.annotation.AfterReturning;
 4 import org.aspectj.lang.annotation.AfterThrowing;
 5 import org.aspectj.lang.annotation.Aspect;
 6 import org.aspectj.lang.annotation.Before;
 7 import org.aspectj.lang.annotation.Pointcut;
 8 
 9 @Aspect // 定義切面
10 public class Logging {
11     @Pointcut("execution(* com.spring.aop2.Student.*(..))") // 定義切點
12     private void selectAll() {
13 
14     }
15     /**
16      * 定義通知方法
17      */
18 
19     @Before("selectAll()")
20     public void beforeAdvice() {
21         System.out.println("----------beforeAdvice-----------");
22 
23     }
24 
25     @AfterReturning(pointcut = "selectAll()", returning = "retVal")
26     public void afterReturningAdvice(Object retVal) {
27         System.out.println("Returning:" + retVal.toString());
28     }
29 
30     @AfterThrowing(pointcut = "selectAll()", throwing = "ex")
31     public void AfterThrowingAdvice(IllegalArgumentException ex) {
32         System.out.println("There has been an exception: " + ex.toString());
33     }
34 
35 }

  2.2下面是 Student.java 檔案的內容:

 1 package com.spring.aop2;
 2 
 3 public class Student {
 4     /**
 5      * 定義學生類
 6      */
 7     private String name;
 8     private Integer age;
 9 
10     public String getName() {
11         return name;
12     }
13 
14     public void setName(String name) {
15         this.name = name;
16     }
17 
18     public Integer getAge() {
19         return age;
20     }
21 
22     public void setAge(Integer age) {
23         this.age = age;
24     }
25 
26     public void printAdvice() {
27         System.out.println("name:" + name + ",age:" + age);
28 
29     }
30 
31 }

  2.3下面是 MainApp.java 檔案的內容:

 1 package com.spring.aop2;
 2 
 3 
 4 
 5 import org.springframework.context.ApplicationContext;
 6 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 7 import org.springframework.context.support.AbstractApplicationContext;
 8 import org.springframework.context.support.ClassPathXmlApplicationContext;
 9 
10 public class Main {
11     /**
12      * Spring aop基於註解    配置檔案springAop.xml
13      * author:
14      * mail:[email protected]
15      * 時間:
16      */
17     public static void main(String[] args) {
18         ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring_xml/springAop.xml");
19         Student student=(Student)applicationContext.getBean("Student");
20         student.printAdvice();
21     }
22 
23 }

3.第三步:建立bean檔案(上面的標頭檔案在上個例子當中有,這裡就省略了)

下面是配置檔案 Beans.xml:

 1     
 2     <!-- 開啟註解      通過aop名稱空間的<aop:aspectj-autoproxy 
 3 />宣告自動為spring容器中那些配置@aspectJ切面的bean建立代理,織入切面-->
 4     <aop:aspectj-autoproxy/>
 5     <!-- 定義切面bean -->
 6     <bean id="Logging" class="com.spring.aop2.Logging"></bean>
 7     
 8     <!-- 配置bean -->
 9     <bean id="Student" class="com.spring.aop2.Student">
10         <property name="name" value="張三"></property>
11         <property name="age" value="23"></property>
12     </bean>

 

讓我們執行一下應用程式。如果你的應用程式一切都正常的話,這將會輸出以下訊息(其中包含了異常通知):

&n