Spring IoC контейнер: внедрение зависимостей на основе сеттера
DI на основе сеттера выполняется контейнером, вызывающим методы setter для ваших bean-компонентов после вызова конструктора без аргументов или статического метода фабрики без аргументов для создания экземпляра вашего bean-компонента.
В следующем примере показан класс, который может быть внедрен зависимостью только при использовании setter внедрения. Этот класс является обычным Java классом. Это POJO, который не зависит от конкретных интерфейсов контейнера, базовых классов или аннотаций.
Java
public class SimpleMovieLister {
// SimpleMovieLister зависит от MovieFinder
private MovieFinder movieFinder;
// метод сеттер, чтобы контейнер Spring мог внедрить MovieFinder
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
// бизнес-логика, которая фактически использует внедренный MovieFinder, опущена...
}
Kotlin
class SimpleMovieLister {
// свойство с поздней инициализацией, чтобы контейнер Spring мог внедрить MovieFinder
lateinit var movieFinder: MovieFinder
// бизнес-логика, которая фактически использует внедренный MovieFinder, опущена...
}
ApplicationContext поддерживает DI на основе конструктора и сеттера для компонентов, которыми он управляет. Он также поддерживает основанный на сеттере DI после того, как некоторые зависимости уже были введены через подход с использованием конструктора. Вы настраиваете зависимости в форме BeanDefinition, которую вы используете вместе с экземплярами PropertyEditor для преобразования свойств из одного формата в другой. Однако большинство пользователей Spring работают не с этими классами напрямую (то есть программно), а с определениями bean-компонентов XML, аннотированными компонентами (то есть классами, аннотированными с помощью @Component, @Controller и т. д.) или методами @Bean в классах @Configuration на основе Java. Эти источники затем преобразуются внутренне в экземпляры BeanDefinition и используются для загрузки всего экземпляра контейнера Spring IoC.
Читайте также:
- Spring IoC контейнер: зависимости
- Spring IoC контейнер: внедрение зависимостей на основе конструктора
- Spring IoC контейнер: обзор Bean, создание экземпляра Bean
Комментарии
Отправить комментарий