我有以下配置,其中有两个来自两个不同配置类的同名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(); } }
我正在像这样注入(和使用)这个bean:
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?我希望在这里有一个例外,必须添加@Primary注释以确保使用了正确的注释。
@Primary
附带一提:即使我添加了@Primary它,也不一定总是注入正确的。
由于您使用相同的名称,所以其中一个bean会覆盖另一个bean。如果@paweł-głowacz建议使用不同的名称,则使用
@Autowired private RestTemplate myRestTemplate;
spring会抱怨,因为它找到两个具有相同RestTemplate类型的bean,并且不知道使用哪个bean。然后,您申请@Primary其中之一。
此处提供更多说明:更多信息