同一个类中方法A中没有事务,调用有事务的方法B无法生效。我在网上看了很多解决办法,都不太好,因为我的项目中实例化的都是Service的接口,使用代理对象调用的话就需要在接口上创建一个方法,这样等于把这个方法暴露出去了。
所以我想在service中创建一个内部类来实现。测试后事务是起作用了,但是我不知道这样有没问题,所以想请大家帮忙看看
public interface IUserService{
void m1();
}
@Service
public class UserServiceImpl implements IUserService {
@Autowired
@Lazy
private SubService subService;
@Override
public void m1() {
subService.test();
}
@Service
class SubService{
@Transactional(rollbackFor = Throwable.class)
public void test(){
//更新数据库
//抛出异常,然后事务成功回滚
}
}
}
在controller中调用m1方法,数据库没有更新,确实回滚成功了。
我想问问,这种内部类的方式来实现事务是否可行