@Transactional标注到interface的方法上,然后事务代理使用CGLIB,事务可以生效么?
一直以来,都认为该情况事务是不生效的,因为CGLIB基于继承做的代理,需要将@Transactional标注到实现类的方法上才可以,但是最近在一个项目debug的时候发现@Transactional标注在interface方法上,然后通过@Autowired引入该bean,发现其CGLIB代理内部有事务增强,大致如下
public interface TestServicei {
@Transactional
String save(String params);
}
@Service
public class TestService implements TestServicei{
@Override
public String save(String params){
System.out.println("save params-->"+params);
return params;
}
}
@Controller
public class Test {
@Autowired
private TestServicei testServicei;
@RequestMapping("/test")
@ResponseBody
public String test(@RequestParam("params") String params){
//在此处DEBUG
return "hashCode:"+testServicei.save(params);
}
}
DEBUG看到的如下
看到这里比较迷惑了,感觉像是有事务增强的,不知道哪里理解错了?求大佬帮忙解惑一下。
环境:Springboot2.0.5 Spring-tx5.1.4 aspectjweaver与aspectjtools为1.5.4
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
也就是说,该情况下,该注解是可以读取到的,事务是生效的?不知道理解的对不对