0

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ますか? ただの見落としになりそうです。

4

0 に答える 0