我正在尝试创建一个将接受特定bean(fasterxml
ObjectMapper
)的组件。
如果有一个名为qualifiedObjectMapper
的合格bean,我想使用该bean。
如果没有使用该名称的bean,但是根本没有一个ObjectMapper
bean,我想使用它。
据我所知,如果这样做:
class MyClass(
@Qualified("qualifiedObjectMapper") objectMapper: ObjectMapper
)
仅当有一个具有该名称的bean时,该函数才起作用,但如果不存在则不使用另一个ObjectMapper
bean(如果有多个,则使用主bean)。
有没有一种方法可以使用限定词(如果存在的话),否则可以使用主要词?
答案 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
}