面向切面編程(AOP)經過提供另外一種思考程序結構的方式來補充面向對象編程(OOP),準確來講是一種編程思想,並不侷限於某一種語言。編程
OOP中模塊化的關鍵單元是類,而在AOP中模塊化單元是切面。切面實現了諸如跨越多種類型和對象的事務管理之類的關注點的模塊化。緩存
Aspect(切面):跨越多個類的關注點的模塊化。事務管理是企業Java應用程序中橫切關注點的一個很好的例子。在Spring AOP中,方面是使用常規類( schema-based approach )或使用 @Aspect 註釋( @AspectJ style )註釋的常規類實現的。性能優化
Joinpoint(鏈接點):在程序執行過程當中的某個階段點,它其實是對象的一個操做,例如方法的調用或異常的拋出。在 Spring AOP中,鏈接點就是指方法的調用。app
Pointcut(切入點):是指切面與程序流程的交叉點,即那些須要處理的鏈接點,以下圖程序流程所示。一般在程序中,切入點指的是類或方法名,如某個通知要應用到全部以add開頭的方法中,那麼全部知足這一規則的方法都是切入點。框架
Advice(通知/加強處理):AOP 框架在特定的切入點執行的加強處理,即在定義好的切入點處所要執行的程序代碼。能夠將其理解爲切面類中的方法,它是切面的具體實現。模塊化
Target Object(目標對象):是指全部被通知的對象,也稱爲被加強對象。若是AOP框架採用的是動態的AOP實現,那麼該對象就是一個被代理對象。性能
Proxy(代理):將通知應用到目標對象以後,被動態建立的對象,是代理對象。在Spring Framework中,AOP代理將是JDK動態代理或CGLIB代理。優化
Weaving(織入):將切面代碼插入到目標對象上,從而生成代理對象的過程。這能夠在編譯時(例如,使用AspectJ編譯器),加載時間或在運行時完成。與其餘純Java AOP框架同樣,Spring AOP在運行時執行編織。代理
AOP適用多模塊系統橫切聯繫,統一處理,具體能夠在下面的場景中使用:調試
Authentication 權限
Caching 緩存
Context passing 內容傳遞
Error handling 錯誤處理
Lazy loading 懶加載
Debugging 調試
logging, tracing, profiling and monitoring 記錄跟蹤 優化 校準
Performance optimization 性能優化
Persistence 持久化
Resource pooling 資源池
Synchronization 同步
Transactions 事務