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.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки