欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何通過XML方式配置AOP過程解析

 更新時(shí)間:2020年07月15日 11:01:03   作者:jock_javaEE  
這篇文章主要介紹了如何通過XML方式配置AOP過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

第一步:把通知類用 bean 標(biāo)簽配置起來

<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標(biāo)簽里面配置 aop:aspect切面

aop:aspect:

作用: 用于配置切面。 屬性:

  • id:給切面提供一個(gè)唯一標(biāo)識(shí)。
  • ref:引用配置好的通知類 bean 的 id。

<aop:aspect id="txAdvice" ref="txManager">
<!--配置通知的類型要寫在此處-->
</aop:aspect>

第四步:使用 aop:pointcut 配置切入點(diǎn)表達(dá)式

aop:pointcut:

作用: 用于配置切入點(diǎn)表達(dá)式。就是指定對(duì)哪些類的哪些方法進(jìn)行增強(qiáng)。

屬性: expression:用于定義切入點(diǎn)表達(dá)式。

id:用于給切入點(diǎn)表達(dá)式提供一個(gè)唯一標(biāo)識(shí)

<!--配置通用切入點(diǎn)表達(dá)式,需要將該標(biāo)簽放置在通知之前-->
<aop:pointcut id="pt1" expression="execution(* com.atguigu.account.service.impl.*.*(..))" />

第五步:使用 aop:xxx 配置對(duì)應(yīng)的通知類型

<aop:config>
  <!--配置通用切入點(diǎn)表達(dá)式-->
  <aop:pointcut id="pt1" expression="execution(* com.atguigu.account.service.impl.*.*(..))" />
  <aop:aspect id="txAdvice" ref="txManager">
    <!--配置前置通知:開啟事務(wù)-->
    <aop:before method="beginTransaction" pointcut-ref="pt1" />
    <!--配置后置通知:提交事務(wù)-->
    <aop:after-returning method="commit" pointcut-ref="pt1" />
    <!--配置異常通知:回滾事務(wù)-->
    <aop:after-throwing method="rollback" pointcut-ref="pt1" />
    <!--配置最終通知:釋放連接-->
    <aop:after method="release" pointcut-ref="pt1" />
  </aop:aspect>
</aop:config>

六、詳細(xì)解析

 aop:before 
  作用:  用于配置前置通知。指定增強(qiáng)的方法在切入點(diǎn)方法之前執(zhí)行  
  屬性: 
    method:用于指定通知類中的增強(qiáng)方法名稱  
    ponitcut-ref:用于指定切入點(diǎn)的表達(dá)式的引用  
    poinitcut:用于指定切入點(diǎn)表達(dá)式  
    執(zhí)行時(shí)間點(diǎn):切入點(diǎn)方法執(zhí)行之前執(zhí)行 
  <aop:before method="beginTransaction" pointcut-ref="pt1"/> 


  aop:after-returning 
    作用:  用于配置后置通知 屬性:  
    method:指定通知中方法的名稱。  
    pointct:定義切入點(diǎn)表達(dá)式  
    pointcut-ref:指定切入點(diǎn)表達(dá)式的引用 
    執(zhí)行時(shí)間點(diǎn):  切入點(diǎn)方法正常執(zhí)行之后。它和異常通知只能有一個(gè)執(zhí)行 
  <aop:after-returning method="commit" pointcut-ref="pt1"/> 


  aop:after-throwing 
     作用:  用于配置異常通知 屬性:  
     method:指定通知中方法的名稱。  
     pointct:定義切入點(diǎn)表達(dá)式  
     pointcut-ref:指定切入點(diǎn)表達(dá)式的引用 
     執(zhí)行時(shí)間點(diǎn):  切入點(diǎn)方法執(zhí)行產(chǎn)生異常后執(zhí)行。它和后置通知只能執(zhí)行一個(gè) 
  <aop:after-throwing method="rollback" pointcut-ref="pt1"/>


  aop:after 
     作用:  用于配置最終通知 屬性:  
     method:指定通知中方法的名稱。  
     pointct:定義切入點(diǎn)表達(dá)式  
     pointcut-ref:指定切入點(diǎn)表達(dá)式的引用 
     執(zhí)行時(shí)間點(diǎn):  無論切入點(diǎn)方法執(zhí)行時(shí)是否有異常,它都會(huì)在其后面執(zhí)行。 
  <aop:after method="release" pointcut-ref="pt1"/> 



 aop:around: 
     作用:  用于配置環(huán)繞通知 
     屬性:  
       method:指定通知中方法的名稱。  
       pointct:定義切入點(diǎn)表達(dá)式  
       pointcut-ref:指定切入點(diǎn)表達(dá)式的引用 
     說明:  它是 spring 框架為我們提供的一種可以在代碼中手動(dòng)控制增強(qiáng)代碼什么時(shí)候執(zhí)行的方式。 
     注意:  通常情況下,環(huán)繞通知都是獨(dú)立使用的 

七、環(huán)繞通知

 /** 
  * 環(huán)繞通知 * @param pjp 
  * spring 框架為我們提供了一個(gè)接口:ProceedingJoinPoint,它可以作為環(huán)繞通知的方法參數(shù)。 
  * 在環(huán)繞通知執(zhí)行時(shí),spring 框架會(huì)為我們提供該接口的實(shí)現(xiàn)類對(duì)象,我們直接使用就行。 
  * @return 
  */ 
  public Object transactionAround(ProceedingJoinPoint pjp) { 
     //定義返回值 
    Object rtValue = null; 
    try {  
    //獲取方法執(zhí)行所需的參數(shù)  
    Object[] args = pjp.getArgs(); 
    
    //前置通知:開啟事務(wù)  
    beginTransaction(); 
    
    //執(zhí)行方法  
    rtValue = pjp.proceed(args); 
    
    //后置通知:提交事務(wù)  
    commit(); 
    }catch(Throwable e) {  
    //異常通知:回滾事務(wù)  
    rollback();  
    e.printStackTrace(); 
    }finally { 
     //最終通知:釋放資源  
       release(); 
    } 
       return rtValue; 
   }

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 打印Java程序的線程棧信息方式

    打印Java程序的線程棧信息方式

    這篇文章主要介紹了打印Java程序的線程棧信息方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 解決java 分割字符串成數(shù)組時(shí),小圓點(diǎn)不能直接進(jìn)行分割的問題

    解決java 分割字符串成數(shù)組時(shí),小圓點(diǎn)不能直接進(jìn)行分割的問題

    這篇文章主要介紹了解決java 分割字符串成數(shù)組時(shí),小圓點(diǎn)不能直接進(jìn)行分割的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java中雙大括號(hào)初始化的理解與使用

    Java中雙大括號(hào)初始化的理解與使用

    最近重讀Java 編程思想,讀到有關(guān)實(shí)例化代碼塊兒的內(nèi)容,使我對(duì)于使用兩個(gè)大括號(hào)進(jìn)行初始化有了更深的理解,下面這篇文章主要給大家介紹了關(guān)于Java中雙大括號(hào)初始化的理解與使用的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • MyBatis持久層框架的用法知識(shí)小結(jié)

    MyBatis持久層框架的用法知識(shí)小結(jié)

    MyBatis 本是apache的一個(gè)開源項(xiàng)目iBatis,接下來通過本文給大家介紹MyBatis持久層框架的用法知識(shí)小結(jié),非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-07-07
  • Netty核心功能之?dāng)?shù)據(jù)容器ByteBuf詳解

    Netty核心功能之?dāng)?shù)據(jù)容器ByteBuf詳解

    這篇文章主要為大家介紹了Netty核心功能之?dāng)?shù)據(jù)容器ByteBuf詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Java 高并發(fā)二:多線程基礎(chǔ)詳細(xì)介紹

    Java 高并發(fā)二:多線程基礎(chǔ)詳細(xì)介紹

    本文主要介紹Java 高并發(fā)多線程的知識(shí),這里整理詳細(xì)的資料來解釋線程的知識(shí),有需要的學(xué)習(xí)高并發(fā)的朋友可以參考下
    2016-09-09
  • Spring的事件監(jiān)聽機(jī)制示例詳解

    Spring的事件監(jiān)聽機(jī)制示例詳解

    這篇文章主要給大家介紹了關(guān)于Spring的事件監(jiān)聽機(jī)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 關(guān)于Spring源碼深度解析(AOP功能源碼解析)

    關(guān)于Spring源碼深度解析(AOP功能源碼解析)

    這篇文章主要介紹了關(guān)于Spring源碼深度解析(AOP功能源碼解析),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 如何使用Maven管理項(xiàng)目?Maven管理項(xiàng)目實(shí)例

    如何使用Maven管理項(xiàng)目?Maven管理項(xiàng)目實(shí)例

    下面小編就為大家?guī)硪黄绾问褂肕aven管理項(xiàng)目?Maven管理項(xiàng)目實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • Java中的幾種讀取properties配置文件的方式

    Java中的幾種讀取properties配置文件的方式

    這篇文章主要介紹了Java中的幾種讀取properties配置文件的方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05

最新評(píng)論