Java注释公用/专用范围

时间:2018-07-27 16:08:35

标签: java hibernate annotations hibernate-validator

在以下文档中,详细介绍了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框架的反射而公开? 我在网上看到的大多数/所有示例都没有这样做-他们很乐意将注释放在私有变量声明上方。

2 个答案:

答案 0 :(得分:0)

使用反射更改字段的可见性实际上并不会更改该字段的可见性。它返回公共字段的副本。不,这仍然不适用。

答案 1 :(得分:0)

本文从未应用于Hibernate Validator和Bean Validation。我们支持对私有字段的注释,并使用反射来访问字段的内容。

实际上,我们通过使字段可访问我们的代码来做到这一点。但是,这不会更改字段本身的可见性。