任何人都可以帮助我理解Hibernate Validation参考文档中本节的含义。
在验证字节码增强对象时,应使用属性级别约束,因为字节码增强库将无法通过反射确定字段访问。 [1]
答案 0 :(得分:1)
字节码增强库会自动将代码添加到您的书面类中。增强器对Java编译器生成的字节码进行后处理,添加字段或方法以实现所需的功能。字节码增强通常在构建时或运行时发生。使用字节码增强的库包括Spring,Hibernate 5,openJPA和lombok。
因此,如果你使用'字节码增强库'那么你肯定应该使用属性级别约束,因为hibernate验证器使用反射进行验证,并且字段上的反射访问不会(肯定)覆盖增强的字节代码属性。
例如,您有以下简单类。
public class Person {
@NotNull
String name;
public String getName() {
return this.name;
}
}
现在您正在使用或已经实现了一个字节码增强器,它将以下功能添加到您的代码中(当然在构建过程中或在字节码中运行时)。
public class Person {
@NotNull
String name;
public String getName() {
if(this.name == null)
return "";
return this.name;
}
}
然后bean验证发挥作用。如果使用字段注释,则直接通过反射访问字段name
并进行验证。验证失败。
但是当您使用属性注释时,bean验证将通过name
方法访问字段getName()
,以确定字段名称是否有效。验证通过。