Spring在当前类中调用事务方法
方式一
可以通过注入自身代理对象的方式,在调用本类方法时触发事务拦截器
@Service
public class SelfProxyTransactionService {
@Autowired
private SelfProxyTransactionService selfProxy;
public void outerMethod() {
// 调用带有事务注解的方法
selfProxy.innerMethod();
}
@Transactional
public void innerMethod() {
// 这里编写需要事务管理的业务逻辑
System.out.println("执行带有事务的操作");
}
}
方式二
通过AopContext获取当前代理对象
1.开启配置
@Configuration
@EnableAspectJAutoProxy(exposeProxy = true)
public class AopConfig {
@Bean
public AspectJAutoProxyRegistrar aspectJAutoProxyRegistrar() {
return new AspectJAutoProxyRegistrar();
}
}
2.获取代理对象 调用内部方法=
@Service
public class AopContextTransactionService {
public void outerMethod() {
// 获取当前代理对象
AopContextTransactionService proxy = (AopContextTransactionService) AopContext.currentProxy();
// 调用带有事务注解的方法
proxy.innerMethod();
}
@Transactional
public void innerMethod() {
// 这里编写需要事务管理的业务逻辑
System.out.println("执行带有事务的操作");
}
}
浙公网安备 33010602011771号