美文网首页
对不支持事物方法的解决方案(代理模式)

对不支持事物方法的解决方案(代理模式)

作者: 小民自愚 | 来源:发表于2019-11-12 16:19 被阅读0次

有时候,在代码中,有些对象是没有注入到spring容器中的,比如实现runnable接口的多线程task,他里边的方法调用,就不会支持事物,因为没有注入spring,spring不会进行管理,就不支持事物,因此打了@transaction注解也没有用。

这种情况下就需要手动添加事物,或者单独写接口,让他支持事物,最终目的,是让这个方法支持事物,最近想了写了一个公用的方法,让他支持事物,其实就是给不支持事物的方法,外边包了一层支持事物的外衣。

1.建立接口:

public interface TransactionalSupportService {

/**

* 声明新的事务,然后执行业务代码

* @param consumer

    */

    void newHxTransactional(Consumer consumer);

}

public interface Consumer {

//对具体业务代码的传递

void accept(T t);

}

2.实现事物接口TransactionalSupportService

@Service

public class TransactionalSupportServiceImplimplements TransactionalSupportService {

//这个接口交给了spring管理,并且支持事物

@Override

@Transactional(propagation = Propagation.REQUIRES_NEW)

public void newHxTransactional(Consumer consumer) {

consumer.accept(null);

    }

}

3.使用:

@Slf4j

public class CxjmyltsrqrdUpdateCbxzAndSaveRdmxTaskimplements Runnable {

private TransactionalSupportServicetransactionalSupportService;

  @Override

  public void run() {

        for (final CxjmyltsrqrdDrmxDTO mxDTO : mxDtos) {

//使用匿名内部类,执行具体的业务方法

transactionalSupportService.newHxTransactional(new Consumer(){

@Override

 public void accept(Object dto) {

this.automaticChangeCbxz(mxDTO); //私有方法不支持事物

              }

});

        }

}

4.总结:从代码可以清晰的看出,就是给不支持事物的方法外边包裹了一层支持事物的外衣,其实这就是代理模式的思想,在某个方法执行的时候,代理类对目标对象进行一些别的处理,进行增强,这里的匿名内部类Consumer相当于代理类,newHxTransactional事物方法对目标进行增强。

顺便说一句,所谓设计模式,它不是一种标准的代码模版,它是一种思想。

相关文章

  • 对不支持事物方法的解决方案(代理模式)

    有时候,在代码中,有些对象是没有注入到spring容器中的,比如实现runnable接口的多线程task,他里边的...

  • 设计模式

    单例模式 模板方法模式 工厂模式 代理模式 静态代理 JDK动态代理

  • Java 代理模式:静态代理、JDK 动态代理和 Cglib 动

    代理模式是Java常用的设计模式,代理类通过调用被代理类的相关方法,并对相关方法进行增强。加入一些非业务性代码,比...

  • 动态代理

    动态代理和代理模式有些相似,都是对某个类中的某些方法进行监听,代理模式在这里不多说,下面概括一下动态代理,以下概括...

  • [Kotlin] Delegation

    代理模式是23种经典设计模式之一,代理模式被认为是继承的更好替代解决方案;因为代理比继承更加灵活,在Java语言中...

  • 代理模式 静态代理到动态代理

    代理模式这种设计模式是一种使用代理对象来执行目标对象的方法并在代理对象中增强目标对象方法的一种设计模式。代理对象代...

  • (二)iOS 开发设计模式:代理、观察者、单例和工厂模式

    设计模式是指软件开发中对普遍存在的问题提出的解决方案。iOS 开发中常用的设计模式有:代理模式、观察者模式、单例模...

  • 代理模式(Proxy)

    代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。 主方法 接口类 实现类(被代理类) 代理类

  • SpringAOP-jdk动态代理

    静态代理与动态代理 静态代理(如SpringAOP-代理模式中所示)的缺点代理目标的方法越多,代理所委托的方法就越...

  • 设计模式之代理模式(结构型)

    第一章 1.1 模式定义 代理模式:代理模式就是引入一个代理对象,通过代理对象实现对原对象的引用。代理模式是一种对...

网友评论

      本文标题:对不支持事物方法的解决方案(代理模式)

      本文链接:https://www.haomeiwen.com/subject/cddqictx.html