我已经阅读了一些有关可选bean依赖项的文章,通常建议使用java Optional类或spring ObjectProvider类。
这些确实有效,但是我的情况有所不同。如果在我的上下文中有多个相同类型的Bean,并用@Qualifier
注释,并且我不知道其中是否需要一个Bean,该怎么办。我需要一个带有特定名称的人。
@ComponentScan(basePackages = "my.package")
public class MyClass {
private final MyOptionalBean myOptionalBean;
MyClass(ObjectProvider<MyOptionalBean> myOptionalBeanObjectProvider) {
this.myOptionalBean = myOptionalBeanObjectProvider.getIfAvailable(() -> null);
}
}
上面的示例有效。但是现在想象一下,在我的上下文中注册了多个MyOptionalBean bean,这些bean被命名了。如何编写与上述类似的代码,但告诉spring通过特定实例的名称查看?
最佳答案
可以组合使用@Autowired(required = false)
和@Qualifier
:
MyClass(@Autowired(required = false) @Qualifier("foo") MyOptionalBean myBean)
{
// myBean will be null if no bean with the qualifier exists
}