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("执行带有事务的操作");
}
}

posted @ 2025-04-23 11:20  有所_期待  阅读(84)  评论(0)    收藏  举报