как один раз инициализировать bean-компонент в контейнере Spring и использовать его везде - PullRequest
0 голосов
/ 23 октября 2018

На самом деле я использую Spring для разработки веб-приложения, проблема, с которой я сталкиваюсь, заключается в том, что я инициализирую bean-компонент, как только загружается контейнер Spring, теперь я должен использовать этот bean-компонент в разных частяхмоя программаограничения, которые у меня есть 1. Я могу получить контекст приложения везде и получить этот бин, но в соответствии с моей проблемой я должен получить этот бин без повторного написания избыточного кода. Так есть ли способ, которым я могу инициализировать этот бин и использовать егопрямо везде в моей программе.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Если вы уже инициализировали свой компонент, вы можете получить к нему доступ через @Autowired из каждого компонента в приложении Spring.

private SomeClass myBean;

 @Autowired   
public void setMyBean(SomeClass myBean){
      this.myBean =myBean;
    }

Или просто:

@Autowired
private SomeClass myBean;

Я предпочитаюпервый способ, выглядит причудливее в моих глазах.

0 голосов
/ 23 октября 2018

Вы не должны получать ваш bean-компонент из контекста напрямую, вместо этого вы должны @Autowire их и позволить Spring внедрить его для вас.

Вот пример двух зависимостей, введенных через конструктор:

@Component
public class Car {

    private final Engine engine;
    private final Transmission transmission;

    @Autowired
    public Car(Engine engine, Transmission transmission) {
        this.engine = engine;
        this.transmission = transmission;
    }
}

Обратите внимание, что ваш класс должен быть самим компонентом Spring, чтобы внедрение могло произойти.

На самом деле в Spring существует три типа внедрения зависимостей: внедрение в конструктор, поле и сеттер.Spring Team рекомендует использовать подход на основе конструктора, и в этом посте приводятся очень приятные аргументы: https://blog.marcnuri.com/field-injection-is-not-recommended/

Вы можете обратиться к этой ссылке для получения дополнительной информации о внедрении на основе конструктора: https://www.baeldung.com/constructor-injection-in-spring

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...