事务注解不生效常见原因:
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
@Autowired //① 注入上下文
private ApplicationContext context;
private OrderHistoryFacade proxySelf; //② 表示代理对象,不是目标对象
@Autowired
public OrderHistoryService orderHistoryService;
@Autowired
public TestFacade testFacade;
@PostConstruct //③ 初始化方法
private void setSelf() {
//从上下文获取代理对象(如果通过proxtSelf=this是不对的,this是目标对象)
//此种方法不适合于prototype Bean,因为每次getBean返回一个新的Bean
proxySelf = context.getBean(OrderHistoryFacade.class);
}
然后调用B方法时我们用:
proxySelf.B();
就可以使B的事务生效