我已经阅读了一些有关可选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
}

08-16 18:26