1. 程式人生 > >spring AOP 之 註解 配置實現(附 Java 程式碼例項)

spring AOP 之 註解 配置實現(附 Java 程式碼例項)

轉載自http://blog.csdn.net/qq_27093465/article/details/53381527

匯入類掃描的註解解析器名稱空間:xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-2.5.xsd"
引號新增這2個url
xml配置檔案如下配置:<context:component-scan base-package="com.lxk.spring.aop.annotation"/>

匯入springAOP的註解解析器


名稱空間:xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
引號新增這2個url
xml配置檔案如下配置:<aop:aspectj-autoproxy/>

上面的2個解析器的前後順序不分先後。

介面類,目標介面

  1. package com.lxk.spring.aop.annotation;  
  2. import
     java.util.List;  
  3. publicinterface PersonDao {  
  4.     void deletePerson();  
  5.     List<Person> getPerson() throws Exception;  
  6.     void savePerson();  
  7.     void updatePerson();  
  8. }  
介面實現類,目標物件
  1. package com.lxk.spring.aop.annotation;  
  2. import com.google.common.collect.Lists;  
  3. import org.springframework.stereotype.Repository;  
  4. import java.util.List;  
  5. /** 
  6.  * Created by lxk on 2016/11/28 
  7.  */
  8. @Repository(value = "personDaoImpl")  
  9. publicclass PersonDaoImpl implements PersonDao {  
  10.     publicvoid deletePerson() {  
  11.         System.out.println("delete perosn");  
  12.     }  
  13.     public List<Person> getPerson() throws Exception {  
  14.         List<Person> personList = Lists.newArrayList();  
  15.         Person person1 = new Person();  
  16.         person1.setPid(1L);  
  17.         person1.setPname("person1");  
  18.         //int a = 1 / 0;
  19.         System.out.println("get person");  
  20.         personList.add(person1);  
  21.         Person person2 = new Person();  
  22.         person2.setPid(2L);  
  23.         person2.setPname("person2");  
  24.         personList.add(person2);  
  25.         return personList;  
  26.     }  
  27.     publicvoid savePerson() {  
  28.         System.out.println("delete perosn");  
  29.     }  
  30.     publicvoid updatePerson() {  
  31.         System.out.println("delete perosn");  
  32.     }  
  33. }  
切面類
  1. package com.lxk.spring.aop.annotation;  
  2. import org.aspectj.lang.JoinPoint;  
  3. import org.aspectj.lang.ProceedingJoinPoint;  
  4. import org.aspectj.lang.annotation.*;  
  5. import org.springframework.stereotype.Component;  
  6. import java.util.ArrayList;  
  7. import java.util.List;  
  8. /** 
  9.  * 切面類 
  10.  * <p> 
  11.  * Created by lxk on 2016/11/28 
  12.  */
  13. @Aspect
  14. @Component(value = "transaction")  
  15. publicclass Transaction {  
  16.     @Pointcut("execution(* com.lxk.spring.aop.annotation.PersonDaoImpl.*(..))")  
  17.     privatevoid aa() {  
  18.     }//切入點簽名
  19.     /** 
  20.      * 前置通知 
  21.      */
  22.     @Before("aa()")  
  23.     publicvoid beforeMethod() {  
  24.         System.out.println("before method");  
  25.     }  
  26.     /** 
  27.      * 後置通知 
  28.      */
  29.     @AfterReturning(value = "aa()", returning = "val")  
  30.     publicvoid afterMethod(JoinPoint joinPoint, Object val) {  
  31.         List<Person> personList = (ArrayList<Person>) val;  
  32.         if (personList != null && !personList.isEmpty()) {  
  33.             for (Person person : personList) {  
  34.                 System.out.println(person.getPname());  
  35.             }  
  36.         }  
  37.         System.out.println("after method");  
  38.     }  
  39.     /** 
  40.      * 最終通知 
  41.      */
  42.     @After("aa()")  
  43.     publicvoid finalMethod(JoinPoint joinPoint) {  
  44.         joinPoint.getArgs();  
  45.         System.out.println("final method");  
  46.     }  
  47.     /** 
  48.      * 環繞通知 
  49.      */
  50.     @Around("aa()")  
  51.     public Object aroundMethod(ProceedingJoinPoint joinPoint) {  
  52.         Object obj = null;  
  53.         try {  
  54.             obj = joinPoint.proceed();  
  55.         } catch (Throwable e) {  
  56.             System.out.println(e.getMessage());  
  57.         }  
  58.         System.out.println("around method");  
  59.         return obj;  
  60.     }  
  61.     /** 
  62.      * 異常通知 
  63.      */
  64.     @AfterThrowing(value = "aa()", throwing = "ex")  
  65.     publicvoid throwingMethod(Throwable ex) {  
  66.         System.out.println(ex.getMessage());  
  67.     }  
  68. }  

xml配置檔案
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <beansxmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:context="http://www.springframework.org/schema/context"
  5.        xmlns:aop="http://www.springframework.org/schema/aop"
  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
  8.            http://www.springframework.org/schema/context  
  9.            http://www.springframework.org/schema/context/spring-context-2.5.xsd  
  10.            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
  11.     <aop:aspectj-autoproxy/>
  12.     <context:component-scanbase-package="com.lxk.spring.aop.annotation"/>
  13. </beans>

測試和model檔案
  1. package com.lxk.spring.aop.annotation;  
  2. import org.junit.Test;  
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5. /** 
  6.  * Created by lxk on 2016/11/28 
  7.  */
  8. publicclass AOPAnnotationTest {  
  9.     @Test
  10.     publicvoid test() throws Exception {