Скажем, что мы используем аннотацию @Autowired
по различным полям в классе и что мы не записываем сеттеры или конструкторы, которые также могут устанавливать поля.
Вопрос: какой должен быть модификатор доступа, private
или package-private
(т.е. нет)?
Например:
public class MyClass {
@Autowired
private MyService myService;
}
против
public class MyClass {
@Autowired
MyService myService;
}
В первом случае (private
поля) Spring использует отражение для подключения поля, даже если у него нет setter.
Второй случай (package-private
) позволяет нам иметь доступ к этим полям (например, для настройки mocks), если нам нужно расширить класс для целей тестирования.
Таким образом, оба случая работают нормально, но что более рекомендуется, особенно в отношении тестирования?