今天项目中有个方法需要使用事务,我在业务层 添加了 注解 @Before(Tx.class),然后故意写了一个 除0 异常。但是操作数据库的方法并没有回滚。
但是使用如下方式的时候,就可以回滚。
Db.tx(() -> {
..... // 业务处理代码
return true;
});
这是为什么呢?
1:在 controller 中通过 @Inject 来注入业务层
2:使用 Aop.get(...) 获取业务层对象
通过上面两种方式得到的业务对象,才是被 aop 代理过的,才会让拦截器生效,注意看文档