通过 bean 名称编写可选的 bean 依赖注入

Writing optional bean dependency injection by bean name

我看过一些关于optional bean dependencies的文章,通常建议使用java Optional class,或者spring ObjectProvider class。

那些确实有效,但我的情况有点不同。如果在我的上下文中有多个相同类型的 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
}