關於spring中內嵌方法呼叫事物失效的情況

2021-10-03 23:56:52 字數 1187 閱讀 6630

之前看到乙個oppo面試題, 大概問的是 a方法有事務 內嵌呼叫b方法 b方法沒事務註解 請問 這個情況下 事務的乙個狀態是什麼

其實 這個我感覺 就是在問 spring中**物件的使用關係

下面這個**是面試題的描述

@service

public

class

testservice

public

voidb(

)}

其實這個時候 內嵌直接呼叫 相當於 都在a的事物裡面 b其實沒有事務

但是下面看看這種情況

@service

public

class

testservice

@transactional

(rollbackfor = exception.

class

)public

voidb(

)}

這個時候 雖然b有了事物註解但是 不生效 因為呼叫的不是**物件 這個方法(b方法)沒有被增強

正確的呼叫方法:

1,迴圈依賴自己:

@service

public

class

testservice

@transactional

(rollbackfor = exception.

class

)public

voidb(

)}

@service

public

class

testservice

@transactional

(rollbackfor = exception.

class

)public

voidb(

)}

3,使用aopcontext.currentproxy()獲取當前**物件

@service

public

class

testservice

@transactional

(rollbackfor = exception.

class

)public

voidb(

)}

Spring靜態方法中呼叫Bean

在寫專案時,我們都會有習慣將一些特定功能的函式,封裝到工具類的靜態方法中,呼叫時,直接通過類命呼叫靜態方法即可。但是,有一些工具類,我們希望靈活一點,比如方法裡面有個變數的值是通過配置檔案或其它形式進行賦值的。解析 這裡我們將這個工具類tokenutil 使用 component註解的形式,依賴注入...

Spring中關於Setter方法注入的理解

setter注入 最常用的注入方法,需要在xml配置檔案中進行手動的配置 要求 物件中的每個屬性必須有setter方法 如何配置 需要為物件的每乙個屬性配置乙個property標籤 如何給屬性注入值,需要先確定屬性的型別 1.簡單資料型別 value賦值 2.引用資料型別 ref賦值 3.集合資料型...

關於非同步方法呼叫

在我們的程式中,很多時候會有一些耗時較長的運算,我們為了保證使用者體驗,讓使用者介面能得到及時的響應。我們一般會採用多執行緒操作,讓耗時操作在 後台完成,比如我們在上傳檔案或其他一些需求要在介面顯示進度條的例子。在 net2.0中為我們供了乙個backgroundworker類可以完成類似的需求,具...