春季:使用@Qualifier()限定的bean(如果可用),否则使用任何

时间:2018-08-31 18:29:33

标签: java spring spring-boot

我正在尝试创建一个将接受特定bean(fasterxml ObjectMapper)的组件。

如果有一个名为qualifiedObjectMapper的合格bean,我想使用该bean。

如果没有使用该名称的bean,但是根本没有一个ObjectMapper bean,我想使用它。

据我所知,如果这样做:

class MyClass(
  @Qualified("qualifiedObjectMapper") objectMapper: ObjectMapper
)

仅当有一个具有该名称的bean时,该函数才起作用,但如果不存在则不使用另一个ObjectMapper bean(如果有多个,则使用主bean)。

有没有一种方法可以使用限定词(如果存在的话),否则可以使用主要词?

2 个答案:

答案 0 :(得分:4)

为此,您可以使用@XmlAttribute(required=true)类,在该类中,基于主对象和可选对象创建另一个合格的bean:

@Configuration

并将生成的bean用作:

@Configuration
class Config {
    @Primary @Bean
    ObjectMapper primary() {...}

    @Bean
    ObjectMapper qualified(){...}

    @Bean
    ObjectMapper resulted(ObjectMapper primary, 
                         @Autowired(required = false)  @Qualifier("qualified") ObjectMapper qualified){
       return qualified == null ? primary : qualified;
    }
}

答案 1 :(得分:0)

尝试

    @Autowired
private ApplicationContext applicationContext;

@Autowired
private ObjectMapper objectMapper;

然后

    try {
    ObjectMapper obj = applicationContext.getBean("qualifiedObjectMapper");
    //use qualifier
}catch(Exception e) {
    //use objectMapper
}