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

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


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


如果没有具有该名称的 bean,但有一个ObjectMapperbean,我想使用它。


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


class MyClass(

  @Qualified("qualifiedObjectMapper") objectMapper: ObjectMapper

)

它只有在有一个具有该名称的 bean 时才有效,但ObjectMapper如果没有,则不会使用另一个bean(如果有多个,请使用主要的)。


有没有办法使用合格的(如果存在),否则使用主要的?


神不在的星期二
浏览 314回答 2
2回答

拉风的咖菲猫

为此,您可以使用@Configurationclass,您可以在其中创建另一个基于主要和可选 bean 的合格 bean:@Configurationclass 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;    }}并将结果 bean 用作:@Serviceclass MyService {    MyService(@Qualifier("resulted") ObjectMapper mapper) {...}}

侃侃尔雅

尝试这个    @Autowiredprivate ApplicationContext applicationContext;@Autowiredprivate ObjectMapper objectMapper;然后    try {    ObjectMapper obj = applicationContext.getBean("qualifiedObjectMapper");    //use qualifier}catch(Exception e) {    //use objectMapper}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java