Весна - позволяет переопределять ТОЛЬКО конкретный боб - PullRequest
0 голосов
/ 09 мая 2019

Поэтому мне нужно переопределить bean-компонент, предоставляемый зависимостью, чтобы настроить некоторую конфигурацию.

Есть ли способ разрешить переопределение только для ЭТОГО конкретного имени?

Не знаюхочу установить

spring.main.allow-bean-definition-overriding=true

Это страшно.Я просто хочу переопределить один конкретный именованный компонент и запретить переопределение во всех других случаях.

** РЕДАКТИРОВАТЬ **

    @Bean
    @Primary
    fun vaadinAuthenticationSuccessHandler(
            httpService: HttpService,
            vaadinRedirectStrategy: VaadinRedirectStrategy
    ): VaadinAuthenticationSuccessHandler {
        return VaadinUrlAuthenticationSuccessHandler(httpService, vaadinRedirectStrategy, "/")
    }

приводит к

The bean 'vaadinAuthenticationSuccessHandler', defined in class path resource [n/c/s/config/security/VaadinAwareSecurityConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [org/vaadin/spring/security/config/VaadinSharedSecurityConfiguration.class] and overriding is disabled.

Стоит отметить, что похожий код, который я видел, на самом деле использует

@Bean(name = VaadinSharedSecurityConfiguration.VAADIN_AUTHENTICATION_SUCCESS_HANDLER_BEAN)

(что не имеет значения, но все же стоит отметить)

1 Ответ

3 голосов
/ 09 мая 2019

В одном из классов @Configuration вы можете объявить @Bean с тем же классом, что и класс из вашей библиотеки зависимостей, и пометить его как @Primary для переопределения bean-компонента.

@Configuration
public class MyConfiguration {
    @Bean
    @Primary
    public BeanClassFromDependency mrBean() {
        return new YourOwnImplementationForBeanClassFromDependency();
    }
}

Впоследствии вы можете выполнять автоматическое подключение как обычно.

@Autowired
private BeanClassFromDependency theBeanThatGotAway;
...