您好,登錄后才能下訂單哦!
這篇文章主要講解了通過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:
作用: 用于配置切面。 屬性:
<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 作用: 用于配置前置通知。指定增強的方法在切入點方法之前執行 屬性: method:用于指定通知類中的增強方法名稱 ponitcut-ref:用于指定切入點的表達式的引用 poinitcut:用于指定切入點表達式 執行時間點:切入點方法執行之前執行 <aop:before method="beginTransaction" pointcut-ref="pt1"/> aop:after-returning 作用: 用于配置后置通知 屬性: method:指定通知中方法的名稱。 pointct:定義切入點表達式 pointcut-ref:指定切入點表達式的引用 執行時間點: 切入點方法正常執行之后。它和異常通知只能有一個執行 <aop:after-returning method="commit" pointcut-ref="pt1"/> aop:after-throwing 作用: 用于配置異常通知 屬性: method:指定通知中方法的名稱。 pointct:定義切入點表達式 pointcut-ref:指定切入點表達式的引用 執行時間點: 切入點方法執行產生異常后執行。它和后置通知只能執行一個 <aop:after-throwing method="rollback" pointcut-ref="pt1"/> aop:after 作用: 用于配置最終通知 屬性: method:指定通知中方法的名稱。 pointct:定義切入點表達式 pointcut-ref:指定切入點表達式的引用 執行時間點: 無論切入點方法執行時是否有異常,它都會在其后面執行。 <aop:after method="release" pointcut-ref="pt1"/> aop:around: 作用: 用于配置環繞通知 屬性: method:指定通知中方法的名稱。 pointct:定義切入點表達式 pointcut-ref:指定切入點表達式的引用 說明: 它是 spring 框架為我們提供的一種可以在代碼中手動控制增強代碼什么時候執行的方式。 注意: 通常情況下,環繞通知都是獨立使用的
七、環繞通知
/** * 環繞通知 * @param pjp * spring 框架為我們提供了一個接口:ProceedingJoinPoint,它可以作為環繞通知的方法參數。 * 在環繞通知執行時,spring 框架會為我們提供該接口的實現類對象,我們直接使用就行。 * @return */ public Object transactionAround(ProceedingJoinPoint pjp) { //定義返回值 Object rtValue = null; try { //獲取方法執行所需的參數 Object[] args = pjp.getArgs(); //前置通知:開啟事務 beginTransaction(); //執行方法 rtValue = pjp.proceed(args); //后置通知:提交事務 commit(); }catch(Throwable e) { //異常通知:回滾事務 rollback(); e.printStackTrace(); }finally { //最終通知:釋放資源 release(); } return rtValue; }
看完上述內容,是不是對通過XML方式配置AOP的方法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。