一尘不染

Spring Boot不抱怨两个同名豆

spring-boot

我有以下配置,其中有两个来自两个不同配置类的同名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它,也不一定总是注入正确的。


阅读 338

收藏
2020-05-30

共1个答案

一尘不染

由于您使用相同的名称,所以其中一个bean会覆盖另一个bean。如果@paweł-głowacz建议使用不同的名称,则使用

@Autowired
private RestTemplate myRestTemplate;

spring会抱怨,因为它找到两个具有相同RestTemplate类型的bean,并且不知道使用哪个bean。然后,您申请@Primary其中之一。

此处提供更多说明:更多信息

2020-05-30