Нужны ли нам статические поля в Spring Beans? - PullRequest
0 голосов
/ 19 ноября 2018

Я видел общепринятую практику создания экземпляра Logger как статических свойств класса, помеченного аннотацией Spring (@Component, @Service).

Поскольку все созданные бины по умолчанию являются одноэлементными. Действительно ли нам нужны статические поля в этом скнерио, поскольку в конце концов будет только один экземпляр?

1 Ответ

0 голосов
/ 19 ноября 2018

Я думаю, что тот же вопрос можно задать для финала: " Зачем объявлять переменную как финальную, если я знаю, что не буду касаться ее через код? "

Дело в том, что вы не единственный, кто касается или читает код. Придание правильного семантического значения важно для удобочитаемого и поддерживаемого кода. Возможно, вы знаете, что служба и / или контроллер будут Singleton, поэтому нет необходимости помещать переменные в static, но таким образом вы явно декларируете их.

Дополнительно:

как вы собираетесь что-то записывать во время создания вашего синглтона, если строительство не удалось :-)

Я цитирую @ dognose комментарий, чтобы сделать ответ более полным. Существует практическая проблема создания статических адресов регистратора: регистрация при создании.

Последующий:

Я просто хотел знать, зачем нам нужен финальный статический регистратор, а не просто финальный регистратор. Что оправдывает регистратор быть статическим членом, а не просто членом класса?

Предположим, ваш класс не синглтон. В этом случае Logger должен просто войти. Это не имеет ничего общего с объектами, это свойство класса. Это означает, что если вы создаете экземпляр одного или тысячи объектов, регистратор не изменяется. Таким образом, вы можете просто поделиться им между всеми объектами, и, следовательно, сделать его статичным.

Давайте предположим, что ваш класс - Синглтон. Всегда будет только один экземпляр. Статика все еще полезна? С практической точки зрения нет. У вас будет только один экземпляр класса, поэтому только один регистратор, статический или нет. Тем не менее, если вы объявляете его статическим, вы заявляете, что хотите, чтобы этот регистратор был свойством класса, а не объектов этого класса. Вы делаете свои намерения и дизайн явными, следовательно, улучшаете качество своего кода.

Надеюсь, это ответит на ваш вопрос.

...