繁体   English   中英

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

[英]Spring: Use @Qualifier()-qualified bean if available, otherwise use any

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

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

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

据我所知,如果我这样做:

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

仅当存在具有该名称的bean时,它才起作用,但如果不存在则不使用另一个ObjectMapper 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;
    }
}

并将结果豆用作:

@Service
class MyService {
    MyService(@Qualifier("resulted") ObjectMapper mapper) {...}
}

尝试这个

    @Autowired
private ApplicationContext applicationContext;

@Autowired
private ObjectMapper objectMapper;

接着

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM