Почему приложение Spring Boot запускается, когда для restTemplate присутствуют два метода @Bean - PullRequest
1 голос
/ 28 октября 2019

У меня есть эта зависимость:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.0.RELEASE</version>
</parent>

<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

</dependencies>

И у меня есть эта конфигурация:

@Configuration
public class AppConfig {

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

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
        return restTemplateBuilder
            .setConnectTimeout(ofMillis(3000))
            .setReadTimeout(ofMillis(3000))
            .build();
    }
}

Интересно, почему Spring не выходит из строя при запуске. Он никогда не запускает первый шаблон restTemplate, а только второй. Я ожидаю, что весна потерпит неудачу.

1 Ответ

0 голосов
/ 28 октября 2019

Это допустимый случай, вы определяете два определения bean-компонента с одинаковыми name одного и того же bean-компонента, затем последний определенный bean-компонент заменит затем первый определенный bean-компонент.

Если вы хотите, чтобы исключение былоБрошенный, когда два bean-компонента определены с одним и тем же именем, вы можете настроить его с помощью setAllowBeanDefinitionOverriding (boolean allowBeanDefinitionOverriding) * Метод 1005 * из DefaultListableBeanFactory - это тот, кто переопределяет, должно ли быть разрешено переопределять определения бина путем регистрации другого определения с помощьюто же имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...