1. 程式人生 > >9. Spring:AOP之增強

9. Spring:AOP之增強

9. Spring:AOP之增強

  1. Spring AOP的增強型別

    在這裡插入圖片描述

  2. 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
        (true); pf.setTarget(target); pf.addAdvice(advice);
    • 通過配置檔案實現增強

      • 配置檔案:

        <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
  3. AOP的後置增強

    後置增強在目標方法呼叫後執行,例如上例中,在服務生每次服務後,也需要向客人問候,可以通過後置增強來實施這一要求

    • 步驟
      • 建立業務介面類:Waiter.java
      • 建立業務實現類:NativeWaiter.java
      • 建立業務增強類:GreetingAfterAdvice.java
      • 建立配置檔案:conf-advice.xml
      • 建立增強測試類:TestAdvice.java
  4. AOP的環繞增強

    環繞增強允許在目標類方法呼叫前後織入橫切邏輯,它綜合實現了前置,後置增強兩者的功能

    • 步驟
      • 建立業務介面類:Waiter.java
      • 建立業務實現類:NativeWaiter.java
      • 建立業務增強類:GreetingInterceptor .java
      • 建立配置檔案:conf-advice.xml
      • 建立增強測試類:TestAdvice.java
  5. AOP的異常丟擲增強

    異常丟擲增強表示在目標方法丟擲異常後實施增強,最適合的場景是事務管理,比如當參與事務的方法丟擲異常後需要回滾事務

    • 示例

      • 建立業務實現類:ForumService.java
      • 建立業務增強類:TransactionManager.java
      • 建立配置檔案:conf-advice.xml
      • 建立增強測試類:TestAdvice.java
    • 增強方法

      在這裡插入圖片描述

  6. AOP的引介增強

    引介增強是一種比較特殊的增強型別,它不是在目標方法周圍織入增強,而是為目標建立新的方法和屬性,所以它的連線點是類級別而非方法級別的

    • 示例
      • 建立介面類:Monitorable.java
      • 建立業務類:PerformanceMonitor.java
      • 建立增強類:ControllablePerformanceMonitor.java
      • 建立配置檔案:conf-advice-introduce.xml
      • 建立增強測試類:TestIntroduce.java