在Java中,事務注解失效的場景有以下幾種情況:
注解放在非public方法上:事務注解只能在public修飾的方法上生效,如果將其放在非public方法上,事務注解將會失效。
自調用方法:如果一個方法在同一個類中被自己調用(而不是通過代理對象調用),事務注解將會失效。因為Spring的事務是通過代理對象實現的,自調用方法將繞過代理對象,導致事務注解失效。
異常被catch住:如果在方法中捕獲了異常并沒有重新拋出,事務注解將會失效。因為Spring的事務是基于異常的回滾機制實現的,方法中的異常必須被重新拋出才能觸發事務回滾。
注解放在私有方法上:事務注解只能在public修飾的方法上生效,如果將其放在私有方法上,事務注解將會失效。
注解放在非Spring管理的Bean上:事務注解只能在Spring管理的Bean上生效,如果將其放在非Spring管理的Bean上,事務注解將會失效。
需要注意的是,以上場景僅適用于基于注解的事務管理,如果使用編程式事務管理,這些場景可能不適用。此外,不同的Spring版本和配置方式可能會有一些差異,具體的失效場景可能會有所不同。