在現在的開發中使用這種方案比較多.
在spring2.0以後它支援
jdk1.5
註解,而整合
aspectj
後可以使用
aspectj
語法,可以簡化開發。
aspect:切面 =切點
+通知(多個切點與多個通知的組合)
aspectj 它是乙個第三方框架,
spring
從2.0
後可以使用
aspectj
框架的部分語法.
aspectj框架它定義的通知型別有6種
1.前置通知before 相當於
beforeadvice
2.後置通知afterreturning 相當於
afterreturningadvice
3.環繞通知 around 相當於
methodinterceptor
4.丟擲通知afterthrowing 相當於
throwadvice
5.引介通知declareparents 相當於
introductioninterceptor
6.最終通知after 不管是否異常,該通知都會執行
相比spring 的傳統
aop advice
多了乙個最終通知
基於xml配置方案(重點必會)
第一步:建立目標
(target)
第二步:建立通知(增強
advice)
注意:在
aspectj
中它的增強可以不實現任何介面
,只需要定義出增強功能(方法
) 第三步:在
spring
的xml
配置檔案中來配置下的是
aspectj
框架用來宣告切面的.
前置通知
後置通知
環繞通知
異常丟擲:
注意:目標行為只
有丟擲了異常之後才會執行這個增強方法
最終通知:
無論是否有異常,最終通知都會執行
關於通知上的引數
1. 在前置通知上可以新增joinpoint引數
通過joinpoint可以獲取目標相關的資訊
使用前置通知可以完成日誌記錄,許可權控制
2. 在後置通知上新增的引數
第二個引數val它可以獲取目標方法的返回值
注意:需要在配置檔案中配置
returning屬性
使用後置通知也可以完成日誌記錄
3. 環繞通知上的引數
它是我們開發中應用最多的,可以完成日誌操作
,許可權操作
,效能監控
,事務管理
4. 丟擲異常通知上的引數
第二個引數throwable它是用於接收丟擲的異常
注意:需要在配置檔案中配置
throwing屬性
5. 最終通知上的引數
可以使用最終通知完成資源釋放
關於**方式的選擇
在spring的
aop開發中
,它是用的是**方案
,**的實現有兩種:
1. jdk的
proxy
2. cglib
spring 框架預設情況下
,會對有介面的類使用
proxy**,
沒有介面的類使用
cglib**.
proxy-target-class的屬性值預設是
false,
它代表有介面使用
proxy**
問題:如果現在要對目標使用
cglib**(
不考慮是否有介面)?
只需要將proxy-target-class的值設定為
true.
基於annotation方案(重點必會)
第一步:編寫目標
target
在spring的配置檔案中配置註解掃瞄
第二步:編寫增強
(advice)
使用@aspect來宣告切面
使用@before來宣告前置通知
注意:必須要在
spring
的配置檔案中開啟
aspectj
註解自動**功能
第三:測試
其他通知型別及引數
後置通知
環繞通知
異常丟擲通知
最終通知
使用@pointcut註解定義切點
在每乙個通知中定義切點,工作量大
,不方便維護
,我們可以使用
@pointcut
來宣告切點
切點允許邏輯運算
例如mypointcut()||mypointcut1()
關於**方式選擇
proxy-target-class預設值是
false,
代表的是如果目標類是有介面的使用
jdk的
proxy**,
如果沒有介面使用
cglib
如果將proxy-target-class設定為
true,
那麼不管目標類是實現了介面
,都會使用
cglib
進行**
Spring整合AspectJ 實現AOP
org.springframework.boot spring boot starter aop component 交給spring容器管理 aspect 告訴spring,此類為乙個切面類 public class cacheaspect around docache public object...
spring之基於aspectj註解aop使用
在配置檔案中開啟aop自動 1 在增強類上面使用 aspect註解 2 在增強方法上面配置不同型別通知 增強類 aspect public class myuser 後置通知 afterreturning value execution cn.aop.user.update public void ...
Spring中基於 AspectJ的AOP配置
本文用於知識點的簡單總結。對於spring中aop的配置,第二種方式是基於 aspectj風格的註解方式,相關配置項在 中定義。以下主要通過 說明基本配置流程。1 定義需要實現的業務介面 package com.aop.service public inte ce myservice 2 編寫實現介...