javascript
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,切入点表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring注解的使用步骤,@Compo
- 下一篇: gradle idea java ssm