Как работает аннотация @Autowired
для частного поля без геттера и сеттера?
Как spring может получить доступ к частному полю?
Как работает @autowired аннотация для частного поля?
Ответ 1
Работает с отражением. Здесь вы можете найти пример того, как установить открытые поля. Но установка личных полей не имеет большого значения для difference
Единственная разница с закрытым полем состоит в том, что вам нужно установить setAccessible, прежде чем вы сможете читать/писать в поле. Кроме того, этот метод может вызвать исключение SecurityException. Java Docs
Ответ 2
@Component
public class A(){}
@Component
public class B(){
@Autowired
private A a;
}
Spring создайте beans, упомянутый как @Component. здесь bean A будет создан первым, а так как B зависит от A, то выполняется инъекция A в B. нет необходимости в каких-либо сеттерах. просто @Component требуется. Spring использует CGLib для создания beans с использованием отражения.
Ответ 3
Три типа инъекций зависимостей
Существует не менее трех способов, с помощью которых объект может получить ссылку на внешний модуль:
вставка конструктора: зависимости предоставляются через конструктор классов.
инъекция сеттера: клиент предоставляет метод setter, который инжектор использует для инъекции зависимости.
инъекция интерфейса:. Зависимость предоставляет метод инжектора, который будет вводить зависимость в любой переданный ей клиент. Клиенты должны реализовать интерфейс, предоставляющий метод setter, который принимает зависимость.