Spring中Transactional注解使用的心得(推薦)
事務特性
@Transactional注解是用于事務控制的,需要知道事務的ACID特征:即原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。
事務是用來控制數(shù)據(jù)的ACID特性的,用于保證數(shù)據(jù)的正確性和完整性。
@Transactional注解有兩種使用方式:
(1)標注在類上面:當作用于類上時,該類的所有public方法將都具有該類型的事務屬性,同時,我們也可以在方法級別使用該標注來覆蓋類級別的定義。
(2)標注在方法上面:當作用于方法上時,只有當該方法發(fā)生了異常才會進行回滾,其他的方法不受影響。
在項目中使用,@Transactional(rollbackFor=Exception.class),如果類加了這個注解,那么這個類里面的方法拋出異常,就會回滾,數(shù)據(jù)庫里面的數(shù)據(jù)也會回滾。在@Transactional注解中如果不配置rollbackFor屬性,那么事物只會在遇到RuntimeException的時候才會回滾,加上rollbackFor=Exception.class,可以讓事物在遇到非運行時異常時也回滾。
今天看黑馬redis的課,里面講到了一個事務注解不生效的問題。
究其原因,就在于Spring中事務注解生效的條件。那么接下來就說一下自己的心得。
- 查了一下資料,就是說如果想讓@Transactional注解生效,那么就只有當被代理類對象調用它的事務方法時,事務注解才會起作用。
- 那如何才能創(chuàng)建代理對象呢,這個Spring也幫我們做好了。
- 只要使用注入bean的方式(也就是依賴注入的方式)去創(chuàng)建bean對象,該bean對象調用被@T注解了的方法,那么就會走代理類,從而@T注解就起作用了。
以下說一下例子吧
public class VoucherOrderServiceImpl implements IVoucherOrderService
@Override
public Result seckillVocher(Long voucherId) {
IVoucherOrderService o = (IVoucherOrderService) AopContext.currentProxy();
return o.secKill(voucherId);
}
@Override
@Transactional
public Result secKill(Long voucherId) {
}
}
- 在一個方法中調用另一個@T注釋的方法,如果直接this.xxx()去調用,那么@T不會生效,上面說的原因嘛,沒有走動態(tài)代理類。
- 那怎么辦呢,我們手動的創(chuàng)建一個代理類對象就能解決改問題。
- 為什么要生成IVoucherOrderService這個類型的動態(tài)代理類對象呢?
-- 這樣想:1.我們要去調用該類的@T方法,肯定要指定成該對象類型。2.換個說法,如果使用注入bean的方式調用該@T方法,不也是生成這個類型的代理類對象嗎
到此這篇關于Spring中Transactional注解使用的心得的文章就介紹到這了,更多相關Spring Transactional注解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
IDEA運行Java項目報錯java: 錯誤: 不支持發(fā)行版本 xx的解決方法
這篇文章主要介紹了IDEA運行Java項目報錯java: 錯誤: 不支持發(fā)行版本 xx的解決方法,文中有詳細的解決方案供大家參考,對大家解決問題有一定的幫助,需要的朋友可以參考下2025-04-04
使用springboot aop來實現(xiàn)讀寫分離和事物配置
這篇文章主要介紹了使用springboot aop來實現(xiàn)讀寫分離和事物配置,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
SpringCloud使用Nacos保存和讀取變量的配置方法
在使用SpringCloud開發(fā)微服務時,經(jīng)常會遇到一些比較小的后臺參數(shù)配置,這些配置不足以單獨開一張表去存儲,而且其他服務會讀取該參數(shù),這篇文章主要介紹了SpringCloud使用Nacos保存和讀取變量,需要的朋友可以參考下2022-07-07
基于springBoot配置文件properties和yml中數(shù)組的寫法
這篇文章主要介紹了springBoot配置文件properties和yml中數(shù)組的寫法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
SpringBoot項目整合達夢數(shù)據(jù)庫詳解(MYSQL轉換達夢數(shù)據(jù)庫)
這篇文章主要為大家詳細介紹了MYSQL轉換達夢數(shù)據(jù)庫以及SpringBoot項目整合達夢數(shù)據(jù)庫的相關教程,文中的示例代碼講解詳細,需要的可以參考下2025-03-03

