yap*_*m01 29 getter bean-validation
我不明白为什么JSR 303(bean验证)是针对getter方法而不是setter的?将它放在setter方法下是不是更合乎逻辑,因为那是进入字段的入口点,应该在此之前检查验证?
Gun*_*nar 28
注释getter并不意味着在调用getter时执行验证.它仅用于标识约束应适用的属性.
将约束放在(通常是公共的)getter而不是(通常是私有的)字段上的一大优点是约束是该类型的公共API的一部分.它们甚至会被添加到生成的JavaDoc中.类型的用户知道哪种约束适用于它而不考虑其内部实现.
注释getter的另一个好处是可以将约束放在基类或接口上的方法中,也可以应用于任何子类型/实现.
这是一个非常好的问题和我从未注意过的事情.但我想我知道答案(也是我自己从未得到过这个问题的原因).
如果您正在考虑这一点,从注释的角度来看,注释定义了验证将发生的位置,那么将它放在getter上是没有意义的.(为什么不在存储值本身时进行验证..).但这不是它的工作方式......
程序员需要告诉验证框架,需要验证哪些属性.因此,您可以将注释直接放在属性(我更喜欢)上,也可以将其放在getter上.它们都表示读操作.框架需要读取您的类的所有属性,这些属性必须经过验证.所以在这种情况下,穿上setter根本没有任何意义..理解的关键是视角......
我希望这是有道理的.
考虑以下代码:
public class BeanValidation {
private int nameSetCount = 0;
private int nameGetCount = 0;
private String name;
public String getName() {
this.nameGetCount++;
return name;
}
public void setName(String name) {
this.nameSetCount++;
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
把注释放在上面 private String name;
注释仅仅通过查看字段就可以轻松识别字段.
把注释放在上面 public String getName()
注释只需查看返回的字段即可轻松识别字段.
把注释放在上面 public void setName(String name)
注释无法识别查看修改字段的字段,因为可以有多个字段.
归档时间: |
|
查看次数: |
8137 次 |
最近记录: |