日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring核心部分之AOP,aspectJ框架实现AOP,切入点表达式

發布時間:2025/3/19 javascript 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring核心部分之AOP,aspectJ框架实现AOP,切入点表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 面向切面編程(Aspect Oriented Programming,AOP)

AOP:以切面為核心,確定切面的執行時間以及執行位置,底層實現是動態代理。

AOP的作用:①在不改動源代碼的情況下,增加功能;②使業務代碼和非業務代碼分離。

1.1 切面(Aspect):給目標方法增強的功能代碼,一般是非業務方法。

1.2 通知(Advice):表示切面和業務方法的相對執行時間,通過@Before、@After等注解指定。

1.3 執行位置:為哪些業務方法添加切面,通過切入點表達式execute指定。

1.4 切入點(PointCut):一個或多個連接點(JointPoint)的集合,表示為切面功能執行的位置。

1.5 連接點(JointPoint):需要功能增強的目標方法。

?

2. 使用aspectJ框架實現第一個AOP小程序

2.1 aspectJ:一個開源的aop框架,兩種實現方式:①使用xml的配置文件(主要是事務功能);②基于注解的方式。

2.2 pom.xml文件加入aspectJ依賴

2.3 spring配置文件添加aspectJ-autoproxy標簽,會為目標對象創建代理對象,并覆蓋原先的目標對象,組件掃描器標簽如果沒有記得加。如果目標類實現了接口,使用jdk動態代理;如果沒實現接口,使用cglib代理。如果實現了接口,又想使用cglib,在spring配置文件的<aop:aspectJ-autoproxy proxy-target-class="true" />

2.4 編寫切面類

2.5 執行結果

?

3. Advice五個注解(這五個注解的切面方法如果要用JoinPoint參數,必須是方法的第一個參數)

3.1 @Before:表示切面功能在目標方法之前執行

3.2 @Around:①在目標前后都能增強功能;②可以控制目標方法是否執行;③參數使用ProceedingJoinPoint;④經常用于事務處理,執行業務方法前關閉自動提交,執行業務方法后決定是回滾還是提交。

3.3?@AfterReturning:在目標方法之后執行,可以得到目標方法的返回值;若要使用返回值,參數名要一致;若要使用JointPoint對象,需要作為第一個參數,否則拋出異常Caused by: java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut

3.4?@AfterThrowing:用于目標方法拋出異常后的處理,相當于try-catch中catch代碼塊,但是并不會真正捕獲、處理異常,異常仍然還是被拋出

3.5?@After:在目標方法之后執行,相當于try-finally中finally代碼塊

3.6 @Around和@AfterReturning注解關于返回值的測試對比及區別

3.7 @PointCut注解:用于為同個切入點添加多個Advice通知時,可以使用別名。

?

4. 切入點表達式

?

?

?

總結

以上是生活随笔為你收集整理的Spring核心部分之AOP,aspectJ框架实现AOP,切入点表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。