Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以下用例应该使用哪种设计模式(优雅的方式)?_Java_Design Patterns_Spring Boot_Transactions_Spring Aop - Fatal编程技术网

Java 以下用例应该使用哪种设计模式(优雅的方式)?

Java 以下用例应该使用哪种设计模式(优雅的方式)?,java,design-patterns,spring-boot,transactions,spring-aop,Java,Design Patterns,Spring Boot,Transactions,Spring Aop,我的web项目中有一个大实体对象(JavaSpring、hibernate、SpringBoot)。在更新POJO对象中的字段时,我必须将一些事件推送到队列中,并以非事务方式执行一些操作 我有两个问题 现在我正计划编写一个方面对象,它执行这些非事务性操作和事件推送。我有@transactional on服务层方法(为其编写方面)。这些方面方法中的失败是否会回滚服务层方法的事务 我提供了两种更新POJO对象中字段的方法 每个字段的单独RESTAPI 用于更新整个对象的api。(此处仅更新非空字段

我的web项目中有一个大实体对象(JavaSpring、hibernate、SpringBoot)。在更新POJO对象中的字段时,我必须将一些事件推送到队列中,并以非事务方式执行一些操作

我有两个问题

  • 现在我正计划编写一个方面对象,它执行这些非事务性操作和事件推送。我有@transactional on服务层方法(为其编写方面)。这些方面方法中的失败是否会回滚服务层方法的事务

  • 我提供了两种更新POJO对象中字段的方法

    • 每个字段的单独RESTAPI
    • 用于更新整个对象的api。(此处仅更新非空字段)

    在第二种情况下,我需要检查字段是否更新,并对每个字段执行事件推送(这里的代码看起来很笨拙)

  • 有什么优雅的方法可以解决这个问题吗

  • 您可以定义先按方面包装服务方法,然后按事务包装服务方法。所以它将是这样的:

    BEGIN TRANSACTION
      BEGIN ASPECT
        METHOD
      END ASPECT
    END TRANSACTION
    
  • 您可以在方面上使用@Order(0)注释来首先使用它

    @Aspect
    @Order(0)
    @Component
    public class SomeAspect {}
    

    你能要求更具体的条款吗?这太抽象了,无法理解您真正需要什么。