有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring@Qualifier不起作用,但@Resource起作用?

我有以下代码:

@Qualifier("dateObjectMapper")
private ObjectMapper mapper;

@Autowired
DefaultProjectTweetSearchProvider(
        Client client,
        ObjectMapper mapper) {
    this.client = client;
    this.mapper = mapper;
}

上述代码不起作用。我收到一条错误消息,说明spring容器无法决定在ObjectMapper的构造函数中使用哪个bean。如果我把@Resource(name = "dateObjectMapper")放在我的mapper字段上面,它就可以工作了。为什么在这种情况下有效?我有两个ObjectMapper豆子,如下所示:

@Bean
ObjectMapper dateObjectMapper() {
   // ... 
}

@Bean
@Primary
ObjectMapper defaultObjectMapper() {
   // ... 
}

共 (1) 个答案

  1. # 1 楼答案

    使用构造函数注入时,@Qualifier注释必须位于参数上

    private ObjectMapper mapper;
    
    @Autowired
    DefaultProjectTweetSearchProvider(
            Client client,
            @Qualifier("dateObjectMapper") ObjectMapper mapper) {
        this.client = client;
        this.mapper = mapper;
    }
    

    注意bean的名称。你的例子:

    @Bean
    ObjectMapper dateObjectMapper() {
       // ... 
    }
    
    @Bean
    @Primary
    ObjectMapper defaultObjectMapper() {
       // ... 
    }
    

    将创建与@Bean方法同名的Bean:dateObjectMapperdefaultObjectMapper