Написание необязательного внедрения зависимости от имени компонента - PullRequest
0 голосов
/ 08 февраля 2019

Я читал некоторые статьи о необязательных зависимостях bean-компонентов, обычно предлагается использовать дополнительный класс java или весенний класс ObjectProvider.

Они работают, но мой случай немного другой.Что если в моем контексте есть несколько бинов одного типа, помеченных @Qualifier, и я не знаю, есть ли бин, который мне нужен среди них.И мне нужен тот с конкретным именем.

@ComponentScan(basePackages = "my.package")
public class MyClass {

 private final MyOptionalBean myOptionalBean;

 MyClass(ObjectProvider<MyOptionalBean> myOptionalBeanObjectProvider) {
     this.myOptionalBean = myOptionalBeanObjectProvider.getIfAvailable(() -> null);
 }

}

Пример выше работает.Но теперь представьте, что в моем контексте зарегистрировано несколько бинов MyOptionalBean, эти бины названы.Как мне написать код, аналогичный приведенному выше, но сказать Spring, чтобы он смотрел по имени конкретного экземпляра?

1 Ответ

0 голосов
/ 08 февраля 2019

Вы можете использовать @Autowired(required = false) и @Qualifier в комбинации:

MyClass(@Autowired(required = false) @Qualifier("foo") MyOptionalBean myBean)
{
    // myBean will be null if no bean with the qualifier exists
}
...