您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java Spring @Transaction方法由同一类中的方法调用,不起作用吗?

Java Spring @Transaction方法由同一类中的方法调用,不起作用吗?

这里的问题是,Spring的AOP代理不会扩展,而是包装你的服务实例以拦截调用。这样的结果是,在你的服务实例中直接调用该服务实例中对“ this”的任何调用,并且包装代理不能截获该调用(该代理甚至不知道任何此类调用)。已经提到一种解决方案。另一个不错的选择是让Spring将服务的一个实例注入到服务本身中,然后在注入的实例上调用你的方法,该实例将成为处理事务的代理。但是请注意,如果你的服务bean不是单例的,这也会带来不良的副作用:

<bean id="userService" class="your.package.UserService">
  <property name="self" ref="userService" />
    ...
</bean>

public class UserService {
    private UserService self;

    public void setSelf(UserService self) {
        this.self = self;
    }

    @Transactional
    public boolean addUser(String userName, String password) {
        try {
        // call DAO layer and adds to database.
        } catch (Throwable e) {
            TransactionAspectSupport.currentTransactionStatus()
                .setRollbackOnly();

        }
    }

    public boolean addUsers(List<User> users) {
        for (User user : users) {
            self.addUser(user.getUserName, user.getpassword);
        }
    } 
}
java 2022/1/1 18:23:55 有381人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶