设为首页 加入收藏

TOP

Spring中Transactional注解使用的心得
2023-07-25 21:26:05 】 浏览:18
Tags:Spring Transactional 解使用

今天看黑马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方法,不也是生成这个类型的代理类对象吗
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇求求你们别再用 kill -9 了,这才.. 下一篇后端统一处理返回前端日期LocalDa..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目