在以下文档中,详细介绍了2009年以来有关注释验证的研究,内容如下:
http://www.ii.uib.no/~federico/latex/annotationlimitations2.pdf
让我们指出,实际上可以注释 像[3]中一样直接将对象的字段作为对象:
@IntRange(min=1,max=100000) private int Amount;
但是,出于简单的原因,我们决定不提供这种可能性: 如果该字段是私有的,则框架必须首先更改其 能够通过反思向公众公开 检索其值。我们认为,允许 外部框架以篡改对象属性的可见性。
因此,与其将注释放在上面的示例中的私有变量声明上,不如将注释放在公共getter()方法上。
public class WebForm {
private int Amount;
...
@IntRange(min=1,max=100000)
public int getAmount {
return this.Amount;
}
}
本文的日期为2009年,所以我想知道这是否仍然适用?如果我使用的是遵循JSR-380和Bean Validation 2.0规范的Hibernate Validator,是否需要在getter级别声明验证批注,以避免私有变量通过Hibernate框架的反射而公开? 我在网上看到的大多数/所有示例都没有这样做-他们很乐意将注释放在私有变量声明上方。
答案 0 :(得分:0)
使用反射更改字段的可见性实际上并不会更改该字段的可见性。它返回公共字段的副本。不,这仍然不适用。
答案 1 :(得分:0)
本文从未应用于Hibernate Validator和Bean Validation。我们支持对私有字段的注释,并使用反射来访问字段的内容。
实际上,我们通过使字段可访问我们的代码来做到这一点。但是,这不会更改字段本身的可见性。