初步學習Spring Aop使用之註解方式
阿新 • • 發佈:2018-12-07
前言:
這裡就主要演示Spring中Aop使用註解是怎麼使用,如果需要了解更多Aop相關概念,可檢視相關資料的介紹
一、專案目錄 【標記檔案為主要檔案】
二、各個檔案的程式碼
AopServer.java 【編寫切點的檔案,就是一些需要被修飾的業務處理】
package aop; import org.springframework.stereotype.Service; @Service public class AopServer { public void add() { System.out.println("舊版本新增業務處理"); } }
AspectClass.java 【切面檔案,定義一些前置後置環繞介面】
package aop; import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component; /**
* @author Luck
* Aop 插入示例
*/ @Component // 告知Spring容器這是有個Bean物件
@Aspect // 宣告這是一個切面
public class AspectClass {
// 定義切點
@Pointcut("execution(* aop.AopServer.*(..))")
public void pointCut() {}
@Before("pointCut()") // 可使用複用的切點
public void start() {
System.out.println("前面插入方法");
}
@After("execution(* aop.AopServer.*(..))") // 可使用自己定義的規則切點
public void end() {
System.out.println("後面插入方法");
}
@Around("pointCut()")
public void around(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("環繞插入前。。。。。。。。。。");
joinPoint.proceed();
System.out.println("環繞插入後。。。。。。。。。。");
}
}
AopApplication.java 【測試入口,也是Spring Boot的入口】
package aop; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Configuration @Controller @SpringBootApplication @ComponentScan(basePackages="aop") public class AopApplication { @Autowired public AopServer sopServer; @RequestMapping(value="/aopDemo") @ResponseBody public String aopDemo() { sopServer.add(); return "success"; } public static void main(String[] args) { SpringApplication.run(AopApplication.class); } }
通過url訪問控制檯列印結果如下:
三、當一個連線點被一個切面的多個註解混合配置時Aop執行順序如下:
沒有出現異常情況
出現異常情況:
四、當一個連線點被多個切面的多個註解混合配置時Aop執行順序是不確認的。如果需要確認執行順序,可通過在Aspect的類上面使用@Order(value)註解來確定多個Aspect的順序,Order裡面的value越小優先順序越高