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

时间:2019-02-08 12:43:12

标签: java spring dependency-injection spring-framework-beans

我已经阅读了一些有关可选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通过特定实例的名称查看?

1 个答案:

答案 0 :(得分:2)

您可以结合使用@Autowired(required = false)@Qualifier

MyClass(@Autowired(required = false) @Qualifier("foo") MyOptionalBean myBean)
{
    // myBean will be null if no bean with the qualifier exists
}