最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring aop 如何通過獲取代理對象實現(xiàn)事務切換

 更新時間:2021年07月19日 14:21:22   作者:_William_Cheung  
這篇文章主要介紹了Spring aop 如何通過獲取代理對象實現(xiàn)事務切換的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Spring aop 獲取代理對象實現(xiàn)事務切換

在項目中,涉及到同一個類中一個方法調(diào)用另外一個方法,并且兩個方法的事務不相關(guān),

這里面涉及到一個事務切換的問題,一般的方法沒問題,根據(jù)通過aop注解在方法上通過加注解標識,

答案是:

通過spring aop類里面的AopContext類獲取當前類的代理對象,

這樣就能切換對應的事務管理器了,具體做法如下:

(1).在applicationContext.xml文件中配置如下:

<!-- 開啟暴露Aop代理到ThreadLocal支持  -->  
    <aop:aspectj-autoproxy expose-proxy="true"/>  

(2).在需要切換的地方獲取代理對象,

再調(diào)用對應的方法,如下:

((類名) AopContext.currentProxy()).方法();  

(3).注意

這里需要被代理對象使用的方法必須是public類型的方法,不然獲取不到代理對象,會報下面的錯誤:

java.lang.IllegalStateException: Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true' to make it available.

開啟暴露AOP代理即可.

因為開啟事務和事務回滾,實際這個過程是aop代理幫忙完成的,當調(diào)用一個方法時,它會先檢查時候有事務,有則開啟事務,

當調(diào)用本類的方法是,它并沒有將其視為proxy調(diào)用,而是方法的直接調(diào)用,所以也就沒有檢查該方法是否含有事務這個過程,

那么本地方法調(diào)用的事務也就無效了。

獲取代理bean的原始對象

public class AopTargetUtil {
   /**
    * 獲取 目標對象
    * @param proxy 代理對象
    * @return
    * @throws Exception
    */
   public static Object getTarget(Object proxy) throws Exception {
      if(!AopUtils.isAopProxy(proxy)) {
         return proxy;//不是代理對象
      }
      if(AopUtils.isJdkDynamicProxy(proxy)) {
         return getJdkDynamicProxyTargetObject(proxy);
      } else { //cglib
         return getCglibProxyTargetObject(proxy);
      }
   }
   private static Object getCglibProxyTargetObject(Object proxy) throws Exception {
      Field h = proxy.getClass().getDeclaredField("CGLIB$CALLBACK_0");
      h.setAccessible(true);
      Object dynamicAdvisedInterceptor = h.get(proxy);
      Field advised = dynamicAdvisedInterceptor.getClass().getDeclaredField("advised");
      advised.setAccessible(true);
      Object target = ((AdvisedSupport)advised.get(dynamicAdvisedInterceptor)).getTargetSource().getTarget();
      return target;
   }
   private static Object getJdkDynamicProxyTargetObject(Object proxy) throws Exception {
      Field h = proxy.getClass().getSuperclass().getDeclaredField("h");
      h.setAccessible(true);
      AopProxy aopProxy = (AopProxy) h.get(proxy);
      Field advised = aopProxy.getClass().getDeclaredField("advised");
      advised.setAccessible(true);
      Object target = ((AdvisedSupport)advised.get(aopProxy)).getTargetSource().getTarget();
      return target;
   }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 3D入門之基本圖形功能 附源碼

    Java 3D入門之基本圖形功能 附源碼

    Java3D API是Sun定義的用于實現(xiàn)3D顯示的接口。3D技術(shù)是底層的顯示技術(shù),Java3D提供了基于Java的上層接口。Java3D把OpenGL和DirectX這些底層技術(shù)包裝在Java接口中。這種全新的設計使3D技術(shù)變得不再繁瑣且可以加入到J2SE、J2EE的整套架構(gòu),故保證了Java3D技術(shù)強大的擴展性
    2021-10-10
  • java中@NotBlank限制屬性不能為空

    java中@NotBlank限制屬性不能為空

    在實體類的對應屬性上添 @NotBlank注解,可以實現(xiàn)對空置的限制,本文就來介紹一下java中@NotBlank限制屬性不能為空,感興趣的可以了解一下
    2024-01-01
  • 流式圖表拒絕增刪改查之kafka核心消費邏輯下篇

    流式圖表拒絕增刪改查之kafka核心消費邏輯下篇

    這篇文章主要為大家介紹了流式圖表拒絕增刪改查之kafka核心消費邏輯講解的下篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Spring之底層架構(gòu)核心概念Environment及用法詳解

    Spring之底層架構(gòu)核心概念Environment及用法詳解

    這篇文章主要介紹了Spring之底層架構(gòu)核心概念-Environment,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • java 將字符串、list 寫入到文件,并讀取內(nèi)容的案例

    java 將字符串、list 寫入到文件,并讀取內(nèi)容的案例

    這篇文章主要介紹了java 將字符串、list 寫入到文件,并讀取內(nèi)容的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • RabbitMQ?Stream插件使用案例代碼

    RabbitMQ?Stream插件使用案例代碼

    這篇文章主要介紹了RabbitMQ?Stream插件使用案例代碼,2.4版為RabbitMQ流插件引入了對RabbitMQStream插件Java客戶端的初始支持,需要的朋友可以參考下
    2024-04-04
  • spring整合shiro框架的實現(xiàn)步驟記錄

    spring整合shiro框架的實現(xiàn)步驟記錄

    Shiro是一個強大易用的Java安全框架,提供了認證、授權(quán)、加密和會話管理等功能。下面這篇文章主要給大家介紹了關(guān)于spring整合shiro框架的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-05-05
  • Spring Boot整合mybatis使用注解實現(xiàn)動態(tài)Sql、參數(shù)傳遞等常用操作(實現(xiàn)方法)

    Spring Boot整合mybatis使用注解實現(xiàn)動態(tài)Sql、參數(shù)傳遞等常用操作(實現(xiàn)方法)

    這篇文章主要介紹了Spring Boot整合mybatis使用注解實現(xiàn)動態(tài)Sql、參數(shù)傳遞等常用操作(實現(xiàn)方法),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Java Management Extensions管理擴展原理解析

    Java Management Extensions管理擴展原理解析

    這篇文章主要介紹了Java Management Extensions管理擴展原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Restful傳遞數(shù)組參數(shù)及注解大全

    Restful傳遞數(shù)組參數(shù)及注解大全

    這篇文章主要介紹了Restful傳遞數(shù)組參數(shù)及注解大全的相關(guān)資料,需要的朋友可以參考下
    2015-12-12

最新評論

吉隆县| 洞头县| 涟水县| 宜春市| 宁乡县| 新安县| 永济市| 西城区| 平原县| 岱山县| 龙泉市| 衡南县| 汽车| 玉山县| 工布江达县| 翁牛特旗| 盐津县| 司法| 潞西市| 营口市| 高陵县| 泸定县| 晋宁县| 宜州市| 平谷区| 区。| 鄂托克旗| 金华市| 石柱| 乌兰浩特市| 噶尔县| 吉木乃县| 三门县| 西乌珠穆沁旗| 武城县| 缙云县| 南木林县| 日土县| 大丰市| 峨眉山市| 吉首市|