AOP(Aspect-Oriented Programming),面向切麵編程。 一些系統層面的服務(例如安全、日誌、事務),這些與業務邏輯無關的服務如果直接寫在業務流程中,這樣會使得業務流程到處都是這些服務代碼,繁瑣難維護,混淆業務本身的職責,還不容易剔除。 AOP的編程思想,是與業務邏輯無關的動 ...
AOP(Aspect-Oriented Programming),面向切麵編程。
一些系統層面的服務(例如安全、日誌、事務),這些與業務邏輯無關的服務如果直接寫在業務流程中,這樣會使得業務流程到處都是這些服務代碼,繁瑣難維護,混淆業務本身的職責,還不容易剔除。
AOP的編程思想,是與業務邏輯無關的動作或任務,應當抽出成一個服務,橫切入(Cross-cutting)業務流程中,業務本身不感知這些服務的存在,只需處理自己的業務邏輯。這樣,添加或移除一個服務是非常容易的。
AOP核心概念
Aspect:所有需橫切入業務流程的服務對象。
Advice:橫切入服務的具體實現。
Joinpoint:Advice橫切入業務流程的點或時機。執行時機可以是某個方法被執行之前或之後,或方法中拋出異常。
Pointcut:定義一系列Joinpoint,當調用方法符合Pointcut表達式時,將Advice橫切入業務流程。
Target:被橫切入服務的對象。
Introduction:一種特殊的Advice,可在執行時期為業務對象動態地加入一些方法或行為。
Proxy:Spring的AOP主要是通過動態代理完成的,也可使用CGLIB代理。
Weave:Advice被應用到對象上的過程。有三個時間點:編譯時期、類載入時期、執行時期。