Должен ли я предоставить сеттер для @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).