我应该在哪里放置字段/方法注释?

时间:2011-12-12 16:20:57

标签: java xml annotations

我很欣赏这个问题的答案可能是“只是保持一致”,但我想了解在字段或方法中添加适用于字段/方法的注释是否有好处。例如,有什么好处:

@XmlElement
private String str;

public String getString() {
    return str;
}

在:

private String str;

@XmlElement
public String getString() {
    return str;
}

感谢。

4 个答案:

答案 0 :(得分:3)

这取决于你是否希望在编组或解组操作期间执行get / set方法中的逻辑。

示例#1 - JPA实体

一些JPA实现使用字节代码操作在getter上的代码中“编织”以执行延迟加载。如果要将此类型的模型映射到XML,则需要注释getter以确保调用get方法的逻辑。

示例#2 - 获取/设置方法不匹配

在下面的答案中,用户具有不兼容的bean访问方法。对于该用例,我建议使用字段访问。

示例#3 - 只读属性

如果您的对象模型具有带有getter但没有setter的属性,则字段访问很有用。

了解更多信息

答案 1 :(得分:0)

这取决于你在做什么。例如:你的xml序列化器/转换器使用getter或直接读取字段?

  1. 如果它使用getter,请标记getter,因为你可以使用getter的任何后退逻辑,而不仅仅是后场。
  2. 如果它直接读取字段,请标记该字段,因为get对该功能无效。吸气剂可能在未来发生变化,但该领域不会也不会改变。

答案 2 :(得分:0)

在第一种情况下,由于字段是私有的,因此将使用反射来执行对带注释的元素的访问。这可能会导致性能不佳(需要在真实案例中进行检查)。

在第二种情况下,将使用getter / setter执行访问。

例如,在Hibernate中,注释私有属性可以创建 true 只读属性:

@Id
private int id;

// No setter so it cannot be changed without reflexion
public int getId() {
    return id;
}

另一方面,注释访问者将使您有机会做更多的事情,而不仅仅是设置/获取属性。

答案 3 :(得分:0)

利益取决于注释所代表的内容。

  1. 许多框架允许字段/方法注释相互补充,例如Spring框架中的setter注入。使用字段注释可以决定是否应该存在setter。

  2. 其他注释处理器可能会触发不同的行为,具体取决于它是注释的方法或字段。例如,安全注释可以放在该方法的方法控制授权上,而字段注释可以控制对引用该变量的所有例程的授权。

  3. 但一般来说,我认为选项很可能是偏好风格,如果你愿意的话。