簡體   English   中英

春季事務管理-注釋在哪里放置?

[英]Spring Transactional Management - Where to Place the Annotations?

如果我有一個事務管理的類,其中有兩個方法,例如

void OuterMethod(Data somedata)
{
   this.InnerMethod(somedata)
}

@Transactional("mymanager")
void InnerMethod(Data somedata)
{
    //writes some things 
}

這有效嗎? 由於某種原因,我無法將其寫入數據庫,盡管它沒有給我任何錯誤。

Spring不使用字節碼檢測工具來實現AOP。 因此可以預見,如果代理對象的方法調用同一對象中的另一個方法,則該方面將不會應用於該方法調用。 但是,Spring可以通過將ExposureProxy設置為True並使用AopContext .currentProxy()將方面應用於此方法調用。

該信息可能有些過時,但是據我所知它仍然是准確的(盡管不確定“ exposeProxy”標志)

看到http://forum.springsource.org/showthread.php?t=9926

這是一個棘手的話題。 當Spring找到@Transactional批注時,它將使用基於JDK接口的代理或基於CGLIB子類的代理為您的對象創建代理。 在這兩種情況下,代理僅適用於公共方法 我可能會簡化一些事情,但這是總的想法。

因此,盡管仍然可以生成一個代理對象來處理帶注釋的InnerMethod() ,但實際上它不會被調用,因為非公共方法將“陷入困境”。 如果Spring對此警告您,那會很好,但是事實並非如此。

一種簡單的解決方案是確保注釋位於公共方法上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM