今天看黑馬redis的課,里面講到了一個事務注解不生效的問題,
究其原因,就在于Spring中事務注解生效的條件,那么接下來就說一下自己的心得,
- 查了一下資料,就是說如果想讓@Transactional注解生效,那么就只有當被代理類物件呼叫它的事務方法時,事務注解才會起作用,
- 那如何才能創建代理物件呢,這個Spring也幫我們做好了,
- 只要使用注入bean的方式(也就是依賴注入的方式)去創建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不會生效,上面說的原因嘛,沒有走動態代理類,
- 那怎么辦呢,我們手動的創建一個代理類物件就能解決改問題,
- 為什么要生成IVoucherOrderService這個型別的動態代理類物件呢?
-- 這樣想:1.我們要去呼叫該類的@T方法,肯定要指定成該物件型別,2.換個說法,如果使用注入bean的方式呼叫該@T方法,不也是生成這個型別的代理類物件嗎
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/518704.html
標籤:Java
下一篇:JVM、JDK、JRE你分的清嗎
