Java @Qualifier能看穿一系列依赖项吗?

Java @Qualifier能看穿一系列依赖项吗?,java,spring,Java,Spring,我在配置文件中声明了一些bean: @Bean public RestTemplate restTemplate() { return new RestTemplate(clientHttpRequestFactory()); } @Bean public ClientHttpRequestFactory clientHttpRequestFactory() { HttpComponentsClientHttpRequestFactory factory = new HttpC

我在配置文件中声明了一些bean:

@Bean
public RestTemplate restTemplate()
{
    return new RestTemplate(clientHttpRequestFactory());
}

@Bean
public ClientHttpRequestFactory clientHttpRequestFactory()
{
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient());
    //some config...
    return factory;
}

@Bean
@Qualifier("key1")
public HttpClient httpClient()
{
    //some config here too..
}

@Bean
@Qualifier("key2")
public HttpClient httpClient()
{
    //some config here too..
}
然后,我想自动连接RestTemplate两次:

@Autowired
@Qualifier("key1")
RestTemplate restTemplate1;

@Autowired
@Qualifier("key2")
RestTemplate restTemplate2;
这样行吗? 既然我有一个依赖链,@Qualifier能看穿这个链直到需要注入HttpClinet吗? 我应该制作restemplate@Scope原型吗?
这将不起作用,因为您在配置类中的HttpClient上使用@Qualifier,而不是在RestTemplate上

你需要像这样的东西我是从脑子里写出来的,所以它可能不会100%起作用:

@Bean(name="key1")
public RestTemplate restTemplate1()
{
    return new RestTemplate(clientHttpRequestFactory1());
}

@Bean(name="key2")
public RestTemplate restTemplate2()
{
    return new RestTemplate(clientHttpRequestFactory2());
}

@Bean
public ClientHttpRequestFactory clientHttpRequestFactory1()
{
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient1());
    //some config...
    return factory;
}


@Bean
public ClientHttpRequestFactory clientHttpRequestFactory2()
{
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient2());
    //some config...
    return factory;
}

public HttpClient httpClient1()
{
    //some config here too..
}

public HttpClient httpClient2()
{
    //some config here too..
}
编辑:

可以避免代码重复,但这取决于您的特定配置,以及在使用RestTemplate时是否确实需要HttpClient和ClientHttpRequestFactory作为bean

例如:

    @Bean(name = "key1")
    public RestTemplate restTemplate1() {
        return new RestTemplate(clientHttpRequestFactory(httpClient(/* params */)));
    }

    @Bean(name = "key2")
    public RestTemplate restTemplate2() {
        return new RestTemplate(clientHttpRequestFactory(httpClient(/* params */)));
    }

    public ClientHttpRequestFactory clientHttpRequestFactory(HttpClient httpClient) {
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
        return factory;
    }

    public HttpClient httpClient(/* paramn */) {
        /* create HttpClient using params  */
    }

所以我仍然需要复制所有依赖bean。我想我明白了:所以@Qualifier不会让我复制bean;相反,它允许我这样做,因为在春天,我不可能有两个豆子来做我刚刚发现的相同类型的事情。对吗?@Daniel如果您不将ClientHttpRequestFactory和HttpClient标记为bean,这是可能的,请参见编辑后的答案。