Должен ли я предоставить сеттер для @Autowired

Я использую Spring 3.0.x с моим проектом. Моя текущая практика с @Autowired приведена в следующем виде:


 @Autowired
 private SomeType someMemberVariable;

Является ли использование метода сеттера лучше и/или предпочтительным? С помощью setter я имею в виду следующее:


 private SomeType someMemberVariable;

 @Autowired
 private void setSomeMemberVariable(SomeType newValue)
 {
  someMemberVariable = newValue;
 }

Я понимаю изменчивые и неизменяемые сеттеры, которые не подходят для этого вопроса.

Ответы

Ответ 1

Я не использую сеттер при использовании @Autowired - он добавляет шаблонный код.

Всякий раз, когда мне нужно установить зависимость в unit test, я использую ReflectionTestUtils.setField(..) - он не является безопасным для компиляции в качестве сеттера, но у меня нет особых проблем с ним.

В качестве побочного элемента, если вы используете spring 3.0, вы можете начать использовать @Inject вместо @Autowired

Ответ 2

Я предпочитаю использовать сеттеры и геттеры, потому что он позволяет вручную подключать объект, когда вы его не запускаете в контексте Spring (т.е. устанавливаете mocks в unit test).