AOP(Aspect-Oriented Programming)經常會出現在面試過程中,AOP到底有沒有用,要怎么使用呢。本篇來一起撥開迷霧!
1 第一個AOP示例
我們會一次將所有的通知類型都覆蓋到,創建一個切面Advisor,并且將切點都綁定到一個自定義注解上面。
引入AOP的Starts:
< dependency >
< groupId >org.springframework.boot< /groupId >
< artifactId >spring-boot-starter-aop< /artifactId >
< /dependency >
自定義注解AOPTest:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AOPTest {
}
TestAspect類:
在方法上標識注解
2 AOP的通知類型
AOP的5種通知類型。
- @Around 環繞通知,環繞切點的通知,比如在方法執行前后。
- @Before 前置通知,切點之前執行,但是不會阻止切點方法的執行,除非拋出異常。
- @After 后置通知, 切點方法跳出的時候執行。(不管是否拋出異常都會執行)。
- @AfterReturning 返回后通知,切點方法正常完成后執行
- @AfterThrowing 異常通知, 方法拋出異常的時候執行。
3 AOP通知的執行順序
關于執行順序,我們跑一邊測試如下:
有異常拋出的情況下,執行順序:
正常執行順序:
小結一下執行順序:
Around > Before > AfterReturning/AfterThrowing > After > Around
4 切點表達式都有哪些
開始的示例中使用了自定義注解來寫切點表達式。
@Pointcut(value = "@annotation(AOPTest)")
public void pointcut() {
}
目前SpringAOP 支持的切點表達式書寫關鍵字有這些 execution,within,this,target,args,@target,@args,@within,@annotation
除了上述的Spring支持的寫法之外,AspectJ 還有許多切點表達式書寫方式Spring并未支持,后期應該會看情況添加一些。
5 組合切點
我們可以使用 &&,||, ! 等合并切點表達式,篩選出我們想要的切點。Spring官方的例子如下:
@Pointcut("execution(public * *(..))")
private void anyPublicOperation() {}
@Pointcut("within(com.xyz.myapp.trading..*)")
private void inTrading() {}
@Pointcut("anyPublicOperation() && inTrading()")
private void tradingOperation() {}
- anyPublicOperation是第一個切點表達式。
- inTrading 是第二個,表示trading包下面的左右方法。
- 第三個切點表達式使用&& 符號,取前兩個切點的交集 ”anyPublicOperation() && inTrading()“
表示trading包下面的所有public的方法。
總結
本片給出了SpringAOP在SpringBoot中的示例,并且分析了各種通知類型的執行時機。并介紹了組合切點表達式的一些用法,以后項目中如果使用到AOP相關的知識我們就可以直接上手啦。
-
自定義
+關注
關注
0文章
12瀏覽量
8726 -
spring
+關注
關注
0文章
340瀏覽量
14392 -
AOP
+關注
關注
0文章
40瀏覽量
11123 -
ADVISOR
+關注
關注
0文章
5瀏覽量
7671
發布評論請先 登錄
相關推薦
Spring AOP如何破解java應用
![Spring <b class='flag-5'>AOP</b>如何破解java應用](https://file1.elecfans.com/web2/M00/A7/C1/wKgZomUQ-1iAAb4oAAGQeDYxI9k272.jpg)
單片機EM88F711N產生不了燒錄器的AOP2文檔
具有AoP技術的雷達傳感器
個體與群體思維狀態下的AOP語言
在AOP中使用標注改進日志功能的實現
AOP及其在數字檔案館系統中的應用
基于AOP的科研申報系統的設計與實現
![基于<b class='flag-5'>AOP</b>的科研申報系統的設計與實現](https://file.elecfans.com/web2/M00/49/51/poYBAGKhwJ-AQSxOAAANT4_I37M796.jpg)
AWR6843AOP 單芯片60GHz至64GHz毫米波傳感器封裝天線 (AOP) 數據表
![AWR6843<b class='flag-5'>AOP</b> 單芯片60GHz至64GHz毫米波傳感器封裝天線 (<b class='flag-5'>AOP</b>) 數據表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
IWR6843AOP單芯片60GHz至64GHz毫米波傳感器封裝天線(AOP)數據表
![IWR6843<b class='flag-5'>AOP</b>單芯片60GHz至64GHz毫米波傳感器封裝天線(<b class='flag-5'>AOP</b>)數據表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
AWR1843AOP單芯片77GHz和79GHz FMCW毫米波傳感器天線封裝(AOP)數據表
![AWR1843<b class='flag-5'>AOP</b>單芯片77GHz和79GHz FMCW毫米波傳感器天線封裝(<b class='flag-5'>AOP</b>)數據表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
IWR1843AOP單芯片77GHz和79GHz FMCW毫米波傳感器天線封裝(AOP)數據表
![IWR1843<b class='flag-5'>AOP</b>單芯片77GHz和79GHz FMCW毫米波傳感器天線封裝(<b class='flag-5'>AOP</b>)數據表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論