代码之家  ›  专栏  ›  技术社区  ›  samanime

Spring:使用@Qualifier()-qualified bean(如果可用),否则使用any

  •  1
  • samanime  · 技术社区  · 6 年前

    我正在尝试创建一个接受bean的组件( fasterxml ObjectMapper )具体来说。

    如果有一个名为 qualifiedObjectMapper

    对象映射器

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

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

    对象映射器

    是否有一种方法可以使用合格的,如果它存在,否则使用主要的?

    2 回复  |  直到 6 年前
        1
  •  5
  •   Max Farsikov    6 年前

    你可以用 @Configuration 类,在其中基于主bean和可选bean创建另一个限定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) {...}
    }
    
        2
  •  0
  •   Gnk    6 年前

    试试这个

        @Autowired
    private ApplicationContext applicationContext;
    
    @Autowired
    private ObjectMapper objectMapper;
    

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