标签:public 必须 required stc self runtime 调用 contex prot
1:必须是runtime异常,方法不要有try catch语句。
2:service 中
@Service()
public class AServiceImpl1 implements AService{
@Transactional(propagation = Propagation.REQUIRED)
public void a() {
this.b();
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void b() {
}
}
这种情况 b的事务不起作用,a的事务起作用,想让b事务起作用,俩种方法:
一:
this.b();-----------修改为--------->((AService) AopContext.currentProxy()).b();
二:
@Service
public class AServiceImpl3 implements AService{
@Autowired //① 注入上下文
private ApplicationContext context;
private AService proxySelf; //② 表示代理对象,不是目标对象
@PostConstruct //③ 初始化方法
private void setSelf() {
//从上下文获取代理对象(如果通过proxtSelf=this是不对的,this是目标对象)
//此种方法不适合于prototype Bean,因为每次getBean返回一个新的Bean
proxySelf = context.getBean(AService.class);
}
@Transactional(propagation = Propagation.REQUIRED)
public void a() {
proxySelf.b(); //④ 调用代理对象的方法 这样可以执行事务切面
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void b() {
}
}
标签:public 必须 required stc self runtime 调用 contex prot
原文地址:https://www.cnblogs.com/hanguocai/p/9876685.html