springboot的註解aop使用教程

1.springboot中使用註解很容易開啓一個aop

@Aspect
@Order(1)
@Component

@Aspect:開啓aop,@Component:需要被掃描到,啓用這個類,@Order:啓動的aop有好多個,這個可以協調配置它們的先後順序

2.涉及到六個常用註解

@Pointcut("")

定義切入點:定義一個方法,代替需要做切面的方法。

比如現在想aop在A方法周圍環繞B,C,怎麼代替這個A方法呢?使用切入點代替,切入點就是這個切面方法。

有了這個方法後,就可以做aop了,那aop有順序在執行方法之前,執行方法的時候,執行方法之後,正常執行完畢,有異常執行完畢

對應的註解五個,名字也比較好理解

@Before,@Around,@After,@AfterReturning,@AfterThrowing

這個幾個註解的value都是寫@Pointcut("")定義方法的包路徑。來對這個切入點進行切面做aop。

注意問題:@Around這個呢,可以代替@Before和@After

3.使用順序

我只簡單列出所有註解,看執行過程順序時這樣的:

@Around--》@Before--》@After--》@AfterReturning--》@AfterThrowing

(1)@Around中調用了return 的 ProceedingJoinPoint.proceed(),這個調用幾次,方法會執行幾次

@Around(value = "com.fast.framework.aop.pointcut.SystemArchitecture.logPointCut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        logger.info("around");
        return point.proceed();
    }

查看測試日誌

15:37:54.865 INFO  com.fast.framework.aop.LogAop 60 around - around
15:37:54.866 INFO  com.fast.framework.aop.LogAop 44 before - before
執行切面方法
815:37:55.034 INFO  com.fast.framework.aop.LogAop 66 after - after
15:37:55.034 INFO  com.fast.framework.aop.LogAop 71 afterReturning - afterReturning
15:37:55.035 INFO  com.fast.framework.aop.LogAop 76 afterThrowing - afterThrowing

順序:@Around--》@Before--》執行切面方法--》@After--》@AfterReturning--》@AfterThrowing

(2)在@Around方法過程中調用

 @Around(value = "com.fast.framework.aop.pointcut.SystemArchitecture.logPointCut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        logger.info("around start");
        Object proceed = point.proceed();
        logger.info("around end");
        return proceed;
    }

輸出日誌

18:40:52.260 INFO  com.fast.framework.aop.LogAop 60 around - around start
18:40:52.261 INFO  com.fast.framework.aop.LogAop 44 before - before
執行切面方法
818:40:52.413 INFO  com.fast.framework.aop.LogAop 62 around - around end
18:40:52.414 INFO  com.fast.framework.aop.LogAop 68 after - after
18:40:52.415 INFO  com.fast.framework.aop.LogAop 73 afterReturning - afterReturning
18:40:52.415 INFO  com.fast.framework.aop.LogAop 78 afterThrowing - afterThrowing

順序:@Around 開始--》@Before--》執行切面方法--》@Around 結束--》@After--》@AfterReturning--》@AfterThrowing

看出around開始是在before之前,結束在before之後

4.獲取織入方法的信息

1.JoinPoint

2.ProceedingJoinPoint  

3.LocalVariableTableParameterNameDiscoverer 獲取方法參數名:詳情見:https://blog.csdn.net/Mint6/article/details/94991183

JoinPoint和ProceedingJoinPoint是差不多的,部分使用方法見:https://blog.csdn.net/Mint6/article/details/92121845

5.aop整體步驟

使用1234,都是指上面的那些步驟

使用1開啓aop--》使用2定義切入點@Pointcut(""),五個順序註解寫整體aop過程--》使用4獲取切面方法信息,進行切面。

 

附:@Around方法是需要手動給返回值,返回ProceedingJoinPoint.proceed()或者ProceedingJoinPoint.proceed()的執行結果都行,但是必須返回,不然aop默認攔截這個方法,沒有返回值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章