Где я должен разместить аннотации полей / методов? - PullRequest
1 голос
/ 12 декабря 2011

Я ценю, что ответом на это может быть «просто быть последовательным», но я хотел бы понять, есть ли преимущества в добавлении аннотаций, применимых к полю / методу, к полю или методу.Например, есть ли какие-либо преимущества:

@XmlElement
private String str;

public String getString() {
    return str;
}

над:

private String str;

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

Спасибо.

Ответы [ 4 ]

3 голосов
/ 12 декабря 2011

Зависит от того, есть ли в методах get / set логика, которую вы хотите выполнить во время маршальной или немаршальной операции.

Пример # 1 - объекты JPA

Некоторые реализации JPA используют манипулирование байтовым кодом для «переплетения» кода на геттере для выполнения отложенной загрузки.Если вы отображаете модель этого типа в XML, то вам нужно будет аннотировать геттер, чтобы убедиться, что вызывается логика методов get.

Пример # 2 - Несоответствующие методы get / set

В приведенном ниже ответе у пользователя были несовместимые методы доступа к компонентам.Для этого варианта использования я рекомендовал использовать полевой доступ.

Пример № 3 - ЧтениеТолько свойства

Если ваша объектная модель имеет свойства с геттером, но без установщика, тогда доступ к полю полезен.

Для получения дополнительной информации

0 голосов
/ 12 декабря 2011

В первом случае доступ к аннотированному элементу будет осуществляться с использованием рефлексии, поскольку поле является закрытым.Это может привести к менее оптимальной производительности (проверяется в реальном живом случае).

Во втором случае доступ будет осуществляться с использованием метода получения / установки.

В Hibernate, дляНапример, аннотирование частного атрибута может создать true атрибут только для чтения:

@Id
private int id;

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

С другой стороны, аннотирование методов доступа даст вам возможность сделать больше, чем просто установить / получитьатрибут.

0 голосов
/ 12 декабря 2011

Преимущество зависит от того, что представляет аннотация.

  1. Многие фреймворки позволяют аннотациям полей / методов дополнять друг друга, например, встраивание сеттера в фреймворк Spring. Там аннотации полей позволяют вам решить, должен ли присутствовать сеттер или нет.

  2. Другие процессоры аннотаций могут вызывать другое поведение в зависимости от того, является ли метод или поле аннотированным. Например, аннотация безопасности может быть помещена для авторизации управления методом для этого метода, в то время как аннотация поля может управлять авторизацией для всех подпрограмм, ссылающихся на переменную.

Но обычно, на мой взгляд, наиболее вероятен вариант предпочтения или стиля , если хотите.

0 голосов
/ 12 декабря 2011

Это зависит от того, что вы делаете.Например: ваш сериализатор / конвертер xml использует геттер или читает поле напрямую?

  1. Если используется геттер, отметьте его, так как вы можете использовать любую обратную логику для геттера, а не только обратное поле.
  2. Если он читает поле напрямую, пометьте поле, так как get бесполезен для этой функции.Геттер может измениться в будущем, но поле не изменится и не сможет измениться.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...