gpt4 book ai didi

java - Hibernate 验证和字节码增强

转载 作者:行者123 更新时间:2023-12-01 09:25:20 25 4
gpt4 key购买 nike

任何人都可以帮助我理解 Hibernate 验证引用文档中此部分的含义。

When validating byte code enhanced objects property level constraints should be used, because the byte code enhancing library won’t be able to determine a field access via reflection. [1]

最佳答案

字节码增强库会自动将代码添加到您编写的类中。增强器对 Java 编译器生成的字节码进行后处理,添加字段或方法来实现所需的功能。字节码增强通常发生在构建时或运行时。使用字节码增强的库包括 Spring、Hibernate 5、openJPA 和 lombok。

因此,如果您使用“字节码增强库”,那么您绝对应该使用属性级别约束,因为 Hibernate validator 使用反射进行验证,并且字段上的反射访问不会(肯定)覆盖增强的字节码属性。

例如,您有以下简单的类。

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 验证将通过 getName() 方法访问提交的 name 来确定字段名称是否有效。以及验证通过。

关于java - Hibernate 验证和字节码增强,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39880106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com