spring Aop的概念
aspect:一定要給spring去管理 抽象 aspectj->類
pointcut:切點(diǎn)表示連接點(diǎn)的集合 -------------------> 表
(我的理解:PointCut是JoinPoint的謂語,這是一個(gè)動作,主要是告訴通知連接點(diǎn)在哪里,切點(diǎn)表達(dá)式?jīng)Q定 JoinPoint 的數(shù)量)
Joinpoint:連接點(diǎn) 目標(biāo)對象中的方法 ----------------> 記錄
(我的理解:JoinPoint是要關(guān)注和增強(qiáng)的方法,也就是我們要作用的點(diǎn))
Weaving :把代理邏輯加入到目標(biāo)對象上的過程叫做織入
target 目標(biāo)對象 原始對象
aop Proxy 代理對象 包含了原始對象的代碼和增加后的代碼的那個(gè)對象
advice:通知 (位置 + logic)
?
?
advice通知類型:
Before 連接點(diǎn)執(zhí)行之前,但是無法阻止連接點(diǎn)的正常執(zhí)行,除非該段執(zhí)行拋出異常
After 連接點(diǎn)正常執(zhí)行之后,執(zhí)行過程中正常執(zhí)行返回退出,非異常退出
After throwing 執(zhí)行拋出異常的時(shí)候
After (finally) 無論連接點(diǎn)是正常退出還是異常退出,都會執(zhí)行
Around advice: 圍繞連接點(diǎn)執(zhí)行,例如方法調(diào)用。這是最有用的切面方式。around通知可以在方法調(diào)用之前和之后執(zhí)行自定義行為。它還負(fù)責(zé)選擇是繼續(xù)加入點(diǎn)還是通過返回自己的返回值或拋出異常來快速建議的方法執(zhí)行。
?
?
Proceedingjoinpoint?和JoinPoint的區(qū)別:
Proceedingjoinpoint?繼承了JoinPoint,proceed()這個(gè)是aop代理鏈執(zhí)行的方法。并擴(kuò)充實(shí)現(xiàn)了proceed()方法,用于繼續(xù)執(zhí)行連接點(diǎn)。JoinPoint僅能獲取相關(guān)參數(shù),無法執(zhí)行連接點(diǎn)。
JoinPoint的方法
1.java.lang.Object[] getArgs():獲取連接點(diǎn)方法運(yùn)行時(shí)的入?yún)⒘斜?#xff1b;?
2.Signature getSignature() :獲取連接點(diǎn)的方法簽名對象;?
3.java.lang.Object getTarget() :獲取連接點(diǎn)所在的目標(biāo)對象;?
4.java.lang.Object getThis() :獲取代理對象本身;
proceed()有重載,有個(gè)帶參數(shù)的方法,可以修改目標(biāo)方法的的參數(shù)
?
Introductions
perthis
使用方式如下:
@Aspect("perthis(this(com.chenss.dao.IndexDaoImpl))")
要求:
1. AspectJ對象的注入類型為prototype
2. 目標(biāo)對象也必須是prototype的
原因?yàn)?#xff1a;只有目標(biāo)對象是原型模式的,每次getBean得到的對象才是不一樣的,由此針對每個(gè)對象就會產(chǎn)生新的切面對象,才能產(chǎn)生不同的切面結(jié)果。
?
總結(jié)
以上是生活随笔為你收集整理的spring Aop的概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springAop和AspectJ的关系
- 下一篇: spring5新特性