您好,登錄后才能下訂單哦!
本篇內容介紹了“Spring的@Transactional怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
事務的概念想必大家都很清楚,其ACID特性在開發過程中占有重要的地位。同時在并發過程中會出現一些一致性問題,為了解決一致性問題,也出現了四種隔離級別,這里就不再詳述了,感興趣的可以去查一下。
Spring中的事務有兩種:
編程式事務
聲明式事務
通常情況下我們使用聲明式事務,它是基于SpringAOP實現的。基于AOP實現的事務極大得幫助了我們的開發效率,其本質是對方法進行前后攔截,在目標方法前加入一個事務,在目標完成后再加入一個事務進行提交或者回滾,這種方式下我們并不需要在目標方法中的代碼中摻雜事務管理代碼,輕松進行事務管理。
而編程式事務就需要我們修改代碼來進行事務管理。這種方法看似很麻煩,但是它的存在自有它的道理,上面我們講到的聲明式事務控制,其控制的細粒度只能作用到方法上,無法在代碼塊中實現聲明式事務控制。我們都知道,一旦加上事務,程序的運行效率就會降低,所以編程式事務也有它的用武之地。
但是我們的廣大勞動人民也是智慧的。直接將需要事務的代碼塊獨立成方法,這樣仍然可以使用聲明式事務。當然在開發中具體情況要具體分析了。
事務的傳播行為:
事務的隔離級別:
@Transactional屬性
示例代碼:
@Service @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class) public class RoleServiceImpl implements RoleService { @Autowired private RoleDao roleDao; @Transactional(propagation = Propagation.SUPPORTS,readOnly = true) @Override public List<Role> findAllRoles() { return roleDao.selectAllRoles(); } }
1、為什么聲明式事務只能應用于方法上?
因為聲明式事務是基于AOP實現的,AOP是基于動態代理實現的。
動態代理只會捕捉來自外部的方法調用,
意思就是類內部的方法調用類內部的另外方法,并不會發生事務行為。
“Spring的@Transactional怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。