9. Spring:AOP之增強
阿新 • • 發佈:2018-11-02
9. Spring:AOP之增強
-
Spring AOP的增強型別
-
Spring AOP的前置增強
-
通過程式碼實現增強
在Spring當中,僅支援方法級別的增強,利用MethodBeforeAdvice實現,表示在目標方法執行前實施增強,步驟如下:
- 建立業務介面類:Waiter.java
- 建立業務實現類:NativeWaiter.java
- 建立業務增強類:GreetingBeforeAdvice.java
- 建立增強測試類:TestAdvice.java
-
ProxyFactory介紹
-
JDK代理:
ProxyFactory pf = new ProxyFactory(); pf.setInterfaces(target.getClass().getInterfaces()); pf.setTarget(target); pf.addAdvice(advice);
-
CGLib代理
ProxyFactory pf = new ProxyFactory(); pf.setInterfaces(target.getClass().getInterfaces()); pf.setOptimize
-
-
通過配置檔案實現增強
-
配置檔案:
<bean id="greetingBefore"class=“……..GreetingBeforeAdvice" />① <bean id="target" class=“…….NaiveWaiter" />② <bean id="waiter" class="org.springframework.aop.framework.ProxyFactoryBean" p:proxyInterfaces=“…….Waiter" ③ p:interceptorNames="greetingAdvice“④ p:target-ref="target"⑤ />
-
常用可配置屬性
- target
- proxyInterfaces
- interceptorNames
- singleton
- optimize
- proxyTargetClass
-
-
-
AOP的後置增強
後置增強在目標方法呼叫後執行,例如上例中,在服務生每次服務後,也需要向客人問候,可以通過後置增強來實施這一要求
- 步驟
- 建立業務介面類:Waiter.java
- 建立業務實現類:NativeWaiter.java
- 建立業務增強類:GreetingAfterAdvice.java
- 建立配置檔案:conf-advice.xml
- 建立增強測試類:TestAdvice.java
- 步驟
-
AOP的環繞增強
環繞增強允許在目標類方法呼叫前後織入橫切邏輯,它綜合實現了前置,後置增強兩者的功能
- 步驟
- 建立業務介面類:Waiter.java
- 建立業務實現類:NativeWaiter.java
- 建立業務增強類:GreetingInterceptor .java
- 建立配置檔案:conf-advice.xml
- 建立增強測試類:TestAdvice.java
- 步驟
-
AOP的異常丟擲增強
異常丟擲增強表示在目標方法丟擲異常後實施增強,最適合的場景是事務管理,比如當參與事務的方法丟擲異常後需要回滾事務
-
示例
- 建立業務實現類:ForumService.java
- 建立業務增強類:TransactionManager.java
- 建立配置檔案:conf-advice.xml
- 建立增強測試類:TestAdvice.java
-
增強方法
-
-
AOP的引介增強
引介增強是一種比較特殊的增強型別,它不是在目標方法周圍織入增強,而是為目標建立新的方法和屬性,所以它的連線點是類級別而非方法級別的
- 示例
- 建立介面類:Monitorable.java
- 建立業務類:PerformanceMonitor.java
- 建立增強類:ControllablePerformanceMonitor.java
- 建立配置檔案:conf-advice-introduce.xml
- 建立增強測試類:TestIntroduce.java
- 示例