[英]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.