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