AOP(Aspect-Oriented Programming)經(jīng)常會(huì)出現(xiàn)在面試過(guò)程中,AOP到底有沒(méi)有用,要怎么使用呢。本篇來(lái)一起撥開(kāi)迷霧!
1 第一個(gè)AOP示例
我們會(huì)一次將所有的通知類(lèi)型都覆蓋到,創(chuàng)建一個(gè)切面Advisor,并且將切點(diǎn)都綁定到一個(gè)自定義注解上面。
引入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類(lèi):
在方法上標(biāo)識(shí)注解
2 AOP的通知類(lèi)型
AOP的5種通知類(lèi)型。
- @Around 環(huán)繞通知,環(huán)繞切點(diǎn)的通知,比如在方法執(zhí)行前后。
- @Before 前置通知,切點(diǎn)之前執(zhí)行,但是不會(huì)阻止切點(diǎn)方法的執(zhí)行,除非拋出異常。
- @After 后置通知, 切點(diǎn)方法跳出的時(shí)候執(zhí)行。(不管是否拋出異常都會(huì)執(zhí)行)。
- @AfterReturning 返回后通知,切點(diǎn)方法正常完成后執(zhí)行
- @AfterThrowing 異常通知, 方法拋出異常的時(shí)候執(zhí)行。
3 AOP通知的執(zhí)行順序
關(guān)于執(zhí)行順序,我們跑一邊測(cè)試如下:
有異常拋出的情況下,執(zhí)行順序:
正常執(zhí)行順序:
小結(jié)一下執(zhí)行順序:
Around > Before > AfterReturning/AfterThrowing > After > Around
4 切點(diǎn)表達(dá)式都有哪些
開(kāi)始的示例中使用了自定義注解來(lái)寫(xiě)切點(diǎn)表達(dá)式。
@Pointcut(value = "@annotation(AOPTest)")
public void pointcut() {
}
目前SpringAOP 支持的切點(diǎn)表達(dá)式書(shū)寫(xiě)關(guān)鍵字有這些 execution,within,this,target,args,@target,@args,@within,@annotation
除了上述的Spring支持的寫(xiě)法之外,AspectJ 還有許多切點(diǎn)表達(dá)式書(shū)寫(xiě)方式Spring并未支持,后期應(yīng)該會(huì)看情況添加一些。
5 組合切點(diǎn)
我們可以使用 &&,||, ! 等合并切點(diǎn)表達(dá)式,篩選出我們想要的切點(diǎn)。Spring官方的例子如下:
@Pointcut("execution(public * *(..))")
private void anyPublicOperation() {}
@Pointcut("within(com.xyz.myapp.trading..*)")
private void inTrading() {}
@Pointcut("anyPublicOperation() && inTrading()")
private void tradingOperation() {}
- anyPublicOperation是第一個(gè)切點(diǎn)表達(dá)式。
- inTrading 是第二個(gè),表示trading包下面的左右方法。
- 第三個(gè)切點(diǎn)表達(dá)式使用&& 符號(hào),取前兩個(gè)切點(diǎn)的交集 ”anyPublicOperation() && inTrading()“
表示trading包下面的所有public的方法。
總結(jié)
本片給出了SpringAOP在SpringBoot中的示例,并且分析了各種通知類(lèi)型的執(zhí)行時(shí)機(jī)。并介紹了組合切點(diǎn)表達(dá)式的一些用法,以后項(xiàng)目中如果使用到AOP相關(guān)的知識(shí)我們就可以直接上手啦。
-
自定義
+關(guān)注
關(guān)注
0文章
12瀏覽量
8762 -
spring
+關(guān)注
關(guān)注
0文章
340瀏覽量
14860 -
AOP
+關(guān)注
關(guān)注
0文章
40瀏覽量
11199 -
ADVISOR
+關(guān)注
關(guān)注
0文章
5瀏覽量
7733
發(fā)布評(píng)論請(qǐng)先 登錄
AOP知識(shí)詳解

Spring AOP如何破解java應(yīng)用

單片機(jī)EM88F711N產(chǎn)生不了燒錄器的AOP2文檔
13WS9301AOP13WS9302AOP13LA769317PR掩膜參數(shù)和原理資料分享
具有AoP技術(shù)的雷達(dá)傳感器
個(gè)體與群體思維狀態(tài)下的AOP語(yǔ)言
在AOP中使用標(biāo)注改進(jìn)日志功能的實(shí)現(xiàn)
AOP及其在數(shù)字檔案館系統(tǒng)中的應(yīng)用
基于AOP的科研申報(bào)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

AoP技術(shù)如何改善外部近場(chǎng)感應(yīng)應(yīng)用
AWR6843AOP 單芯片60GHz至64GHz毫米波傳感器封裝天線 (AOP) 數(shù)據(jù)表

IWR6843AOP單芯片60GHz至64GHz毫米波傳感器封裝天線(AOP)數(shù)據(jù)表

AWR1843AOP單芯片77GHz和79GHz FMCW毫米波傳感器天線封裝(AOP)數(shù)據(jù)表

IWR1843AOP單芯片77GHz和79GHz FMCW毫米波傳感器天線封裝(AOP)數(shù)據(jù)表

評(píng)論