【发布时间】:2017-06-09 13:55:22
【问题描述】:
我有以下代码:
@Qualifier("dateObjectMapper")
private ObjectMapper mapper;
@Autowired
DefaultProjectTweetSearchProvider(
Client client,
ObjectMapper mapper) {
this.client = client;
this.mapper = mapper;
}
上面的代码不起作用。我收到一条错误消息,指出 spring 容器无法决定在 ObjectMapper 的构造函数中使用哪个 bean。如果我将@Resource(name = "dateObjectMapper") 放在我的mapper 字段上方,它就可以工作。为什么它在这种情况下工作?我有 2 个 ObjectMapper 豆子,像这样:
@Bean
ObjectMapper dateObjectMapper() {
// ...
}
@Bean
@Primary
ObjectMapper defaultObjectMapper() {
// ...
}
【问题讨论】:
-
将
@Qualifier("dateObjectMapper")添加到方法dateObjectMapper()。 -
所以您必须注释 Bean 名称(方法)和引用该 bean 的字段?
-
不,不是重复的。我的构造函数上有
@Autowired,而不是我的字段。我不需要将@Autowired放在我的字段上方。 -
这就是文档所说的:7.9.4 Fine-tuning annotation-based autowiring with qualifiers。但正如它所说:对于后备匹配,bean 名称被视为默认限定符值。
-
实际上,您应该在 bean 被 定义 (
@Bean) 和 bean 注入 (@Autowired)。但是,您实际上并没有在注入 bean 的地方使用@Qualifier,因为那将是构造函数,这意味着您应该将@Qualifier放在构造函数 parameter 上。
标签: java spring spring-mvc