【发布时间】:2017-01-17 10:42:29
【问题描述】:
我的 Spring Boot 应用程序,已经在一个自动配置类中从一个依赖 jar 中创建了一个 bean,如下所示:
@Bean
@Order(100)
public StaticRouteLocator staticRouteLocator(AdminServerProperties admin) {
Collection<ZuulRoute> routes = Collections
.singleton(new ZuulRoute(admin.getContextPath() + "/api/turbine/stream/**",
properties.getUrl().toString()));
return new StaticRouteLocator(routes, server.getServletPrefix(), zuulProperties);
}
现在我想替换这个 bean,但我仍然需要这个 jar,它有这个不需要的 Bean 创建。所以我在我的主要自动配置类中添加了另一个 bean 创建方法,如下所示:
@Bean(name="patchedStaticRouteLocator")
@Order(10)
@Primary
@ConditionalOnMissingBean
public StaticRouteLocator patchedStaticRouteLocator(AdminServerProperties admin) {
Collection<ZuulProperties.ZuulRoute> routes = Collections
.singleton(new ZuulProperties.ZuulRoute(admin.getContextPath(),
properties.getUrl().toString()));
return new StaticRouteLocator(routes, server.getServletPrefix(), zuulProperties);
}
但这未能替换目标 bean。错误信息清晰易懂:
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.cloud.netflix.zuul.filters.RouteLocator] is defined: more than one 'primary' bean found among candidates: [routeLocator, patchedStaticRouteLocator, staticRouteLocator, compositeRouteLocator, applicationRouteLocator]
我的问题是在 Spring Boot 中替换此类现有 bean 的正确方法是什么?提前致谢。
【问题讨论】:
标签: spring-boot javabeans spring-java-config