在SpringClientFactory AppContext的

时间:2016-06-24 02:27:45

标签: spring spring-cloud spring-cloud-netflix netflix-ribbon

我正在使用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;
    }
}

有没有人尝试在SpringClientFactory中使用替代bean范围(request,session,globalsession)?

这个更专注于Spring Cloud维护者:是否有意识地认为范围不会从父上下文传播到NamedContextFactory中创建的范围?这似乎只是一种疏忽。

0 个答案:

没有答案