Вы не должны получать ваш 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