簡體   English   中英

我應該在哪里放置字段/方法注釋?

[英]Where should I place field/method annotations?

我很欣賞這個問題的答案可能是“只是一致”,但我想了解在字段或方法中添加適用於字段/方法的注釋是否有好處。 例如,有什么好處:

@XmlElement
private String str;

public String getString() {
    return str;
}

過度:

private String str;

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

謝謝。

這取決於您是否希望在編組或解組操作期間執行get / set方法中的邏輯。

示例#1 - JPA實體

一些JPA實現使用字節碼操作來“編織” getter上的代碼以執行延遲加載。 如果要將此類型的模型映射到XML,則需要對getter進行注釋以確保調用get方法上的邏輯。

示例#2 - 不匹配的get / set方法

在下面的答案中,用戶具有不兼容的bean訪問方法。 對於該用例,我建議使用字段訪問。

示例#3 - 只讀屬性

如果您的對象模型具有帶有getter但沒有setter的屬性,則字段訪問非常有用。

欲獲得更多信息

這取決於你在做什么。 例如:您的xml序列化器/轉換器使用getter還是直接讀取字段?

  1. 如果它使用getter,請標記getter,因為你可以使用任何后退邏輯來獲取getter,而不僅僅是后場。
  2. 如果它直接讀取該字段,請標記該字段,因為獲取對該功能沒有用。 吸氣劑可能在未來發生變化,但該領域不會也不會改變。

在第一種情況下,由於字段是私有的,因此將使用反射執行對帶注釋元素的訪問。 這可能會導致最佳性能降低(需要在實際情況下進行檢查)。

在第二種情況下,將使用getter / setter執行訪問。

例如,在Hibernate中,注釋私有屬性可以創建真正的只讀屬性:

@Id
private int id;

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

另一方面,注釋訪問器將使您有機會做更多的事情,而不僅僅是設置/獲取屬性。

利益取決於注釋所代表的內容。

  1. 許多框架允許字段/方法注釋相互補充,例如Spring框架中的setter注入。 使用字段注釋可以決定是否應該存在setter。

  2. 其他注釋處理器可能會觸發不同的行為,具體取決於它是注釋的方法還是字段。 例如,安全注釋可以放在對該方法的方法控制授權上,而字段注釋可以控制對所有引用該變量的例程的授權。

但總的來說,我認為該選項很可能是偏愛的選項 ,或者您願意的話,可以選擇樣式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM