@Transactional、@Async都是使用代理来实现事务控制和异步操作的,如果我们调用方和被调用方都在同一个类文件中,又没有做特别的处理,通常都是不生效的。
其实最好的办法就是自己获取代理对象,然后调用,也不用自己注入自己或者单独提到另外的一个类中
1.类上添加注解:
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
2.使用代理对象调用
((XxxxImpl) AopContext.currentProxy()).someMethod()
很简单的解决了不想提代码到另外的类,代理又能生效的问题。