AOP概念:
1. aop面向切面編程, 擴展功能不修改源代碼實現
2. aop採起橫向抽取機制, 取代了傳統的縱向繼承體系重複性代碼spring
AOP做用: 在程序運行期間, 不修改源碼對已有的方法進行加強
AOP優點:減小重複代碼 提升開發效率 維護方便
編程
Spring 能幫咱們作的:
須要咱們本身作的: 加強的方法必須本身寫 在什麼執行這些加強的方法 對業務層那些方法進行加強
Spring中AOP: 框架類會根據目標類是否實現了接口來選擇不一樣動態代理技術框架
Joinpoint 鏈接點: 是指那些被攔截到的點, 在spring中 這些點指的是方法 由於spring中只支持方法類型的鏈接點
具體: 業務層接口全部的方法都是鏈接點 好比ICustomerService中的 findAllCustomer(), saveCustomer()
Pointcut 切入點:指咱們要哪些Jointpoint進行攔截定義
具體:被加強的方法就是切入點 沒有被加強的方法不是切入點 切入點必定是鏈接點 鏈接點不必定是切入點
好比下面代碼: 除了test方法 ICustomerService中的其餘方法都是切入點spa
Advice 通知/加強: 指攔截到Joinpoint以後所要作的事情就是通知
通知的類型: 前置通知, 後置通知 異常通知 最終通知 環繞通知
具體:加強方法就是通知 好比TransactionManager中的方法就是通知代理
Introduction 引介: 一種特殊的通知 在不修改類代碼的前提下 Introduction能夠在運行期間爲類動態的添加一些方法或Field 通常不用
Target 目標對象: 代理的目標對象對象
Weaving 織入: 把加強應用到目標對象來建立新的代理對象的過程 spring採用動態代理織入 而AspectJ採用編譯和類裝載織入 一個抽象的概念 也就是加強的代碼一開始執行 就是weaving
Proxy 代理:一個類被AOP織入加強後 就產生了一個結果代理類 proxyCs就是代理
Aspect 切面: 是切入點和通知(引介)的結合 就是說明加強的方法在何時執行blog
思考: 若是不使用Spring AOP技術 咱們要怎麼實現程序運行期間, 不修改源碼對已有的方法進行加強繼承