我正在使用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
中创建的范围?这似乎只是一种疏忽。