如何通過XML方式配置AOP過程解析
第一步:把通知類用 bean 標簽配置起來
<bean id="txManager" class="com.atguigu.account.utils.TransactionManager"> <!-- 注入ConnectionUtils --> <property name="connectionUtils" ref="connectionUtils" /> </bean>
第二步:使用 aop:config 聲明 aop 配置
aop:config:
作用:用于聲明開始 aop 的配置
<aop:config>
</aop:config>
第三步:在使用 aop:config標簽里面配置 aop:aspect切面
aop:aspect:
作用: 用于配置切面。 屬性:
- id:給切面提供一個唯一標識。
- ref:引用配置好的通知類 bean 的 id。
<aop:aspect id="txAdvice" ref="txManager">
<!--配置通知的類型要寫在此處-->
</aop:aspect>
第四步:使用 aop:pointcut 配置切入點表達式
aop:pointcut:
作用: 用于配置切入點表達式。就是指定對哪些類的哪些方法進行增強。
屬性: expression:用于定義切入點表達式。
id:用于給切入點表達式提供一個唯一標識
<!--配置通用切入點表達式,需要將該標簽放置在通知之前-->
<aop:pointcut id="pt1" expression="execution(* com.atguigu.account.service.impl.*.*(..))" />
第五步:使用 aop:xxx 配置對應的通知類型
<aop:config>
<!--配置通用切入點表達式-->
<aop:pointcut id="pt1" expression="execution(* com.atguigu.account.service.impl.*.*(..))" />
<aop:aspect id="txAdvice" ref="txManager">
<!--配置前置通知:開啟事務-->
<aop:before method="beginTransaction" pointcut-ref="pt1" />
<!--配置后置通知:提交事務-->
<aop:after-returning method="commit" pointcut-ref="pt1" />
<!--配置異常通知:回滾事務-->
<aop:after-throwing method="rollback" pointcut-ref="pt1" />
<!--配置最終通知:釋放連接-->
<aop:after method="release" pointcut-ref="pt1" />
</aop:aspect>
</aop:config>
六、詳細解析
aop:before
作用: 用于配置前置通知。指定增強的方法在切入點方法之前執(zhí)行
屬性:
method:用于指定通知類中的增強方法名稱
ponitcut-ref:用于指定切入點的表達式的引用
poinitcut:用于指定切入點表達式
執(zhí)行時間點:切入點方法執(zhí)行之前執(zhí)行
<aop:before method="beginTransaction" pointcut-ref="pt1"/>
aop:after-returning
作用: 用于配置后置通知 屬性:
method:指定通知中方法的名稱。
pointct:定義切入點表達式
pointcut-ref:指定切入點表達式的引用
執(zhí)行時間點: 切入點方法正常執(zhí)行之后。它和異常通知只能有一個執(zhí)行
<aop:after-returning method="commit" pointcut-ref="pt1"/>
aop:after-throwing
作用: 用于配置異常通知 屬性:
method:指定通知中方法的名稱。
pointct:定義切入點表達式
pointcut-ref:指定切入點表達式的引用
執(zhí)行時間點: 切入點方法執(zhí)行產生異常后執(zhí)行。它和后置通知只能執(zhí)行一個
<aop:after-throwing method="rollback" pointcut-ref="pt1"/>
aop:after
作用: 用于配置最終通知 屬性:
method:指定通知中方法的名稱。
pointct:定義切入點表達式
pointcut-ref:指定切入點表達式的引用
執(zhí)行時間點: 無論切入點方法執(zhí)行時是否有異常,它都會在其后面執(zhí)行。
<aop:after method="release" pointcut-ref="pt1"/>
aop:around:
作用: 用于配置環(huán)繞通知
屬性:
method:指定通知中方法的名稱。
pointct:定義切入點表達式
pointcut-ref:指定切入點表達式的引用
說明: 它是 spring 框架為我們提供的一種可以在代碼中手動控制增強代碼什么時候執(zhí)行的方式。
注意: 通常情況下,環(huán)繞通知都是獨立使用的
七、環(huán)繞通知
/**
* 環(huán)繞通知 * @param pjp
* spring 框架為我們提供了一個接口:ProceedingJoinPoint,它可以作為環(huán)繞通知的方法參數。
* 在環(huán)繞通知執(zhí)行時,spring 框架會為我們提供該接口的實現類對象,我們直接使用就行。
* @return
*/
public Object transactionAround(ProceedingJoinPoint pjp) {
//定義返回值
Object rtValue = null;
try {
//獲取方法執(zhí)行所需的參數
Object[] args = pjp.getArgs();
//前置通知:開啟事務
beginTransaction();
//執(zhí)行方法
rtValue = pjp.proceed(args);
//后置通知:提交事務
commit();
}catch(Throwable e) {
//異常通知:回滾事務
rollback();
e.printStackTrace();
}finally {
//最終通知:釋放資源
release();
}
return rtValue;
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
解決java 分割字符串成數組時,小圓點不能直接進行分割的問題
這篇文章主要介紹了解決java 分割字符串成數組時,小圓點不能直接進行分割的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12

