站長留言

  • ✅ 本站維護及更新歷史紀錄,詳情請參考公告
  • ✅ 有任何意見、想法,歡迎留言給Spicy知道喔
  • ✅ 固定於每周一至周五更新Blogger文章,周末不定期
JavaSpring

【Spring】AOP概述

tags: Spring Java

OOP AOP
Object Oriented Programming Aspect Oriented Programming
高內聚 Decorator, Proxy pattern

簡介

  • OOP不適合定義橫向關係,例如日誌功能,日誌代碼往往橫向地散佈在所有對象層次中,而與它對應的對象的核心功能毫無關係
  • 散佈在各處的無關的代碼被稱為橫切(cross cutting)
  • 導致了大量代碼的重複,而不利於各個模塊的重用
  • 水平切割:影響多個class的行為封裝到一個可重用模組,減少系統的重複程式碼,降低模組間的耦合度
  • 一個攔截器(interceptor)攔截一些處理過程,例如,當一個method被執行,Spring AOP能夠劫持正在運行的method,在method執行前或者後加入一些額外的功能
  • 應用:日誌記錄、事務處理、異常處理、安全控制和效能統計方面

名詞解釋

  • Cross-cutting concerns:橫切

    • 插入一些與物件核心功能無關的代碼至各個物件的處理流程
    • 若直接撰寫在負責某business的物件之流程中,會使得維護程式的成本增高,例如若您今天要將物件中的記錄功能修改或是移除該服務,則必須修改所 有撰寫曾記錄服務的程式碼,然後重新編譯
  • Target Object

    • 通常是runtime proxies
  • Aspect 切面

    • 將散落於各個business物件之中的Cross-cutting concerns收集起來,設計各個獨立可重用的物件
    • 事務處理和日誌處理可以理解為兩個切面
    • Transaction Management
<tx:annotation-driven transaction-manager="transactionManager" />
  • Weaving 織入
    • Weave至應用程式之上,不需要服務的時候,也可以馬上從應用程式中脫離,應用程式中的可重用元件不用作任何的修改
    • 將Aspect代碼插入到Proxy的過程
    • 代理的invoke方法完成的工作
    • 類型
      • Compile time
      • Classload time
      • Runtime:Spring AOP default
  • JoinPoint
    • Aspect在應用程式執行時加入business流程的點或時機
    • 時機
      • 方法的調用
      • class initialize
      • 特定的異常被拋出
  • Pointcut
    • JoinPoint的assertion
    • 指定某個Aspect在哪些Joinpoint時被應用至應用程式之上
      • 根據method的名字或者正規表示式去攔截一個method
      • 定義檔中撰寫Pointcut,當中說明了哪些Aspect要應用至應用程式中的哪些Joinpoint
  • Advice
    • 在Aspect的某個特定的Joinpoint上執行的動作
      • Aspect的具體實作稱之為Advice
      • LogHandler類別在AOP的術語就是Aspect的一個具體實例
    • 使用Interceptor(攔截器)來實現Advice
    • 類型
      • before:method執行前的動作
      • after:method執行後的動作
      • around…
  • Advisor
    • Advice和Pointcut組成的獨立的單元,並且能夠傳給proxy

order

  • spring aop就是一個同心圓,要執行的方法為圓心,最外層的order最小
    1. 從最外層按照AOP1、AOP2的順序依次執行doAround方法,doBefore方法
    2. 執行method方法
    3. 最後按照AOP2、AOP1的順序依次執行doAfter、doAfterReturn方法

舉例:資料庫操作

  1. 呼叫method
  2. 觸發runtime proxies的method
  3. 資料庫操作的method
  4. Transaction Management
  5. 利用Interceptor辨認為aspect
  6. Spring要對調用DAO的方法加以控制,所以就去找到對應的advice,去實作aspect
  7. 其他需要實作的aspect
  8. 根據Pointcut weave到相對應的JoinPoints
  9. 執行其他與資料庫操作無關的程式碼

Reference

  1. AOP 觀念與術語
  2. spring Transaction 事务
  3. Spring AOP之坑:完全搞清楚advice的执行顺序
  4. Spring - 通知(Advice)和Advisor(增强器/顾问)

沒有留言:

張貼留言

本網站建議使用電腦或平板瀏覽