了解AOP之前,建議先學習代理設(shè)計模式
什么是AOP
AOP(Aspect Oriented Programming):面向切面編程柠逞,是一種思想
OOP:代碼邏輯是自上而下的青瀑,而在這些過程中璧亮,難免會產(chǎn)生一些橫切性的問題(次要性業(yè)務(wù)),從而AOP就應(yīng)運而生了斥难。
AOP的編程思想是把業(yè)務(wù)邏輯與橫切問題進行分離枝嘶,從而達到 解耦的目的,提高代碼的重用性及開發(fā)效率哑诊。
AOP術(shù)語
連接點(Join point):其實就是目標對象中的方法method
切點(Pointcut):許多連接點的集合群扶,即方法的集合
切面(Aspect):切點、通知等的載體镀裤,也可以理解為一個類
目標對象(Target object)
代理對象(AOP proxy)
織入(Weaving):把代理邏輯織入到目標對象的過程
通知(Advice):什么時候通知竞阐,通知到哪里
通知類型:
Before
After
AfterThrowing
After (Finally)
Around Advice:
ProceedingJoinPoint和JoinPoint的區(qū)別:
ProceedingJoinPoint繼承了JoinPoint,proceed()是aop代理鏈執(zhí)行的方法
JoinPoint的方法:
1.getArgs()------獲取連接點(方法)參數(shù)
2.getThis()------獲取代理對象
3.getTarget()------獲取目標對象
4.getSignature()------獲取連接點的方法簽名對象
proceed()可以修改目標方法的參數(shù)
靜態(tài)代理
SpringAop的底層技術(shù)
- JDK動態(tài)代理(默認)
- CGLIB代理
編譯時織入還是運行時織入暑劝?兩者都是運行時織入
初始化時織入還是獲取對象時織入骆莹?通過源碼分析,在初始化時織入
推薦閱讀
JDK動態(tài)代理與CGLIB動態(tài)代理代碼講解
AOP的應(yīng)用場景
- 性能檢測
- 日志記錄
- 權(quán)限驗證
- 效率檢查
- 事務(wù)管理
- Mysql讀寫分離