1. 程式人生 > >初步學習Spring Aop使用之註解方式

初步學習Spring Aop使用之註解方式

前言:

這裡就主要演示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越小優先順序越高