SpringClientFactory
カスタム でリボン クライアントを作成するためにを使用していますcom.netflix.niws.client.http.RestClient
。これRestClient
は、@Bean
リクエスト スコープ (つまり@Scope("request")
) である と結び付けられます。これはすべて、Brixton リリース トレインの一部として行われます。
RibbonClientSpecification customSpec = new RibbonClientSpecification("default.custom",
new Class<?>[]{CustomConfig.class}); // defines custom RestClient
SpringClientFactory scf = new SpringClientFactory();
scf.setConfigurations(Arrays.asList(customSpec));
これSpringClientFactory
にはApplicationContext
、特定の に対して独自にインスタンス化する がname
あり、このコンテキストにはスコープが登録されていません。
を拡張する回避策がありますSpringClientFactory
が、少しぎこちなく感じられ、利用可能な の型に関する仮定を行いBeanFactory
ます。
class ScopePropagatingSpringClientFactory extends SpringClientFactory {
protected AnnotationConfigApplicationContext createContext(String name) {
AnnotationConfigApplicationContext context = super.createContext(name);
ApplicationContext parentContext = context.getParent();
if (parentContext != null) {
ConfigurableListableBeanFactory parentBF =
(ConfigurableListableBeanFactory) parentContext.getAutowireCapableBeanFactory();
String[] scopes = parentBF.getRegisteredScopeNames();
for(String scope : scopes) {
context.getBeanFactory().registerScope(scope, parentBF.getRegisteredScope(scope));
}
}
return context;
}
}
内で代替 Bean スコープ (リクエスト、セッション、グローバルセッション) を使用しようとした人はいSpringClientFactory
ますか?
これは、Spring Cloud のメンテナーに向けられたものです。スコープが親コンテキストから 内で作成されたものに伝播されないという意識的な理由はありNamedContextFactory
ますか? ただの見落としになりそうです。