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

时间:2016-08-22 14:25:20

标签: java design-patterns spring-boot transactions spring-aop

我的Web项目中有一个很大的Entity对象。(JAVA spring,hibernate,spring-boot)在更新POJO对象中的字段时,我必须将一些事件推送到队列并以非事务方式执行某些操作。

我有两个问题

  1. 现在我打算编写一个方面对象来执行这些非事务性操作和事件推送。我在服务层方法上有@transactional(为其编写方面)。这些方面方法中的失败是否会回滚服务层方法的事务?

  2. 我提供了两种更新POJO对象字段的方法。

    • 每个领域的个人休息api。
    • 用于更新整个对象的api。(此处不会更新空字段)


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

  3. 有没有优雅的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

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

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