1. 程式人生 > >Spring獲取當前類的代理物件

Spring獲取當前類的代理物件

摘要:在專案中,涉及到同一個類中一個方法呼叫另外一個方法,並且兩個方法的事務不相關,
這裡面涉及到一個事務切換的問題,一般的方法沒問題,根據通過aop註解在方法上通過加註解標識,
答案是:通過spring aop類裡面的AopContext類獲取當前類的代理物件,
這樣就能切換對應的事務管理器了,具體做法如下:

(1).在applicationContext.xml檔案中配置如下:

[html] view plain copy
<!-- 開啟暴露Aop代理到ThreadLocal支援  -->  
    <aop:aspectj-autoproxy expose-proxy="true"/>  


(2).在需要切換的地方獲取代理物件,再呼叫對應的方法,如下:

[java] view plain copy
((類名) AopContext.currentProxy()).方法();  


(3).注意,這裡需要被代理物件使用的方法必須是public型別的方法,不然獲取不到代理物件,會報下面的錯誤:

[java] view plain copy
java.lang.IllegalStateException: Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true' to make it available.  
開啟暴露AOP代理即可.

因為開啟事務和事務回滾,實際這個過程是aop代理幫忙完成的,當呼叫一個方法時,它會先檢查時候有事務,有則開啟事務,
當呼叫本類的方法是,它並沒有將其視為proxy呼叫,而是方法的直接呼叫,所以也就沒有檢查該方法是否含有事務這個過程,
那麼本地方法呼叫的事務也就無效了。
--------------------- 
作者:_William_Cheung 
來源:CSDN 
原文:https://blog.csdn.net/qq496013218/article/details/77102164 
版權宣告:本文為博主原創文章,轉載請附上博文連結!