在用Spring 的AOP進行事務管理的時候,碰到了一些關於Exception纔回滾的問題。通過網上搜索資料總算明白了,跟網友分享一下。
先介紹一下Exception:
在Java中Exception大概分成3類:
(1)Error級別的錯誤,一般是系統級的錯誤,例如:內存溢出、硬件錯誤等,在應用中無法處理,程序遇到該異常會立即停止。
(2)unchecked exception:一般是Runtime Exception,就是在程序運行的時候才知道的錯誤,在編譯的時候不會出問題。除非手工捕獲異常,否則程序立即停止。
(3)checked exception:是程序員自願拋出的異常,必須捕獲或者拋出,在編譯的時候會提示。程序遇到該異常不會立即停止,會在捕獲異常之後繼續運行。
再介紹Spring AOP:
Spring AOP也就是常說的切面編程,內部原理就是代理模式。通過網上搜索會有很對代理模式的介紹,這裏不作說明。使用Spring AOP的事物管理的時候,會對出現異常的地方自動進行回滾。對於unchecked exception會自動觸發回滾;對於checked exception如果直接捕獲了,並沒有拋出則不會觸發回滾。如果拋出了checked exception,需要手工配置回滾的異常,在事物管理屬性中通過rollback-for配置。
若有不足之處望大家指點!