aop 是spring的核心之一,在springboot之前,使用AOP已經相對比較多了,主要在開發中用於實現日誌記錄,安全校驗,權限等功能。
在springboot把Spring的核心功能都簡化使用之後,aop的配置並沒有太大的變化,基本還是原來的使用。
我們做系統增強,分爲前增強,後增強,環繞增強 三種基本類型,當然我看還有一些實現了return 增強之類的,本質上都一樣的。
Springboot通過@Aspect註解來實現aop 的功能。我們在使用的時候,需要在類上面聲明好這個註解。
同時,也要定義切點,切面這些功能。
比如 ,通過@Pointcut來定義切點
@Pointcut("execution(public * com.example.demo.controller.*.*(..))")
public void webLog(){
}
指定com.example.demo.controller包下面的所有方法都要被增強。
@Before("webLog()")
public void doBeforeAdvice(JoinPoint joinPoint){
System.out.println("我是前置通知!!!");
//獲取目標方法的參數信息
Object[] obj = joinPoint.getArgs();
//AOP代理類的信息
}
@After("webLog()")
public void doAfterAdvice(JoinPoint joinPoint){
System.out.println("後置通知執行了!!!!");
}
@Around("execution(* com.zkn.learnspringboot.web.controller..*.testAround*(..))")
public Object doAroundAdvice(ProceedingJoinPoint proceedingJoinPoint){
System.out.println("環繞通知的目標方法名:"+proceedingJoinPoint.getSignature().getName());
try {//obj之前可以寫目標方法執行前的邏輯
Object obj = proceedingJoinPoint.proceed();//調用執行目標方法
return obj;
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return null;
}