提问者:小点点

春靴不抱怨两个同名豆子


我有以下配置,其中我有两个来自两个不同配置类的同名Spring bean。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfiguration {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration 
public class OtherRestTemplateConfiguration {

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

我像这样注射(和使用)这个豆子:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

@Component
public class SomeComponent {

    @Autowired
    private RestTemplate restTemplate;

}

现在,我的问题是:为什么Spring没有抱怨拥有多个同名bean?我希望这里有一个异常,并且必须添加一个@主要注释以确保使用正确的注释。

附带说明:即使我添加了@主要,它仍然不总是注入正确的。


共2个答案

匿名用户

其中一个bean覆盖了另一个bean,因为您使用相同的名称。如果使用了不同的名称,如@pawe-gowacz建议的那样,那么在使用的情况下

@Autowired
private RestTemplate myRestTemplate;

Spring会抱怨,因为它发现两个bean具有相同的RestTemplate类型并且不知道使用哪个。然后您将@主要应用于其中一个。

更多解释在这里:更多信息

匿名用户

你需要这样命名豆子:

@Configuration
public class RestTemplateConfiguration {

    @Bean(name="bean1")
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

@Configuration 
public class OtherRestTemplateConfiguration {

    @Bean(name="bean2")
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}