私は怒鳴るように依存するJARから1つの自動configuratonクラス内のBeanの作成すでに、ブートアプリケーションが春:Springブートアプリケーションで既存の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(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]
私の質問春のブートでこのような既存のbeanを置き換える正しい方法は何ですか?前もって感謝します。
感謝。しかし、私はそれを 'BeanPostProcessor'コンポーネントを実装することによって完成させました。 – leo
あなたは大歓迎です。にもかかわらずあなたが実用的な解決策を見つけたことは素晴らしいことです。 –