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