Написание необязательного внедрения зависимости от имени компонента

Я читал некоторые статьи о необязательных зависимостях 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 ответ

Решение

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

MyClass(@Autowired(required = false) @Qualifier("foo") MyOptionalBean myBean)
{
    // myBean will be null if no bean with the qualifier exists
}
Другие вопросы по тегам