我有一个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
因为我所做的自定义注释接受了一些特殊的参数,用户可以指定我们在审计过程中使用的参数。