代码之家  ›  专栏  ›  技术社区  ›  Richard

javer将字段与注释进行比较

  •  0
  • Richard  · 技术社区  · 6 年前

    我有一个java8/Maven/Spring启动项目。我使用Javers来审核应用程序中的更改,但是我创建了一个自定义注释,它放在一个类中的字段上方,如果更改了,我希望对该类进行审核。下面是一个示例类:

    public class Foo {
      @AuditThis
      private final String someString;
      private final int someInt;
      @AuditThis
      private final double someDouble;
      private final long someLong;
      @AuditThis
      private final List<String> someList;
    }
    

    打电话的时候 javers.compare(foo1, foo2) @AuditThis 在上面。因此,在这种情况下,它只会比较 someString , someDouble someList 世界的领域 Foo 对象。

    public class AuditThisComparator implements CustomPropertyComparator<Object, ValueChange> {
       @Override
       public ValueChange compare(final Object left,
                                  final Object right,
                                  final GlobalId globalId,
                                  final Property property) {
           ValueChange change = null;
    
           Field[] leftFields = left.getClass().getDeclaredFields();
           Field[] rightFields = right.getClass().getDeclaredFields();
    
           int upperBound = leftFields.length;
           for (int i = 0; i < upperBound; i++) {
               if (return i < leftFields.length && leftFields[i].getAnnotation(AuditThis.class) != null) {
                   change = new ValueChange(globalId, property.getName(), left, right);
                   break;
               }
           }
    
           return change;
       }
    }
    

    然后像这样注册:

    Javers javers = JaversBuilder.javers()
                                 .registerCustomComparator(new AuditThisComparator(), Object.class)
                                 .build();
    

    但这个自定义比较器从来没有被调用时,我这样做 .compare()

    我不能用这个 @DiffIgnore 因为我所做的自定义注释接受了一些特殊的参数,用户可以指定我们在审计过程中使用的参数。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Bartek Walacik    6 年前