2013-11-14 68 views
3

我可以让多个线程使用相同的静态HttpComponentsClientHttpRequestFactory实例来安全地创建它们各自的ClientHttpRequest吗?Spring框架HttpComponentsClientHttpRequestFactory线程安全吗?

我无法找到任何能够告诉我答案的手册。

我假设它是线程安全的,因为所有的createRequest方法实际上都会执行一个请求对象的新实例化。例如,

public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException { 
    HttpUriRequest httpRequest = createHttpUriRequest(httpMethod, uri); 
    postProcessHttpRequest(httpRequest); 
    return new HttpComponentsClientHttpRequest(getHttpClient(), httpRequest, createHttpContext(httpMethod, uri)); 
} 

但是,它然后调用其他一些可能不是线程安全的方法。

事实上,如果你确实知道答案,那么在哪里可以告诉我Spring的任何线程安全的手册?

+1

如果你使用的是Spring,为什么你需要静态引用HttpComponentsClientHttpRequestFactory? –

回答

5

一般而言,Spring基础结构中以Factory结尾的任何类在初始化后都是线程安全的(即一旦构造函数被调用并且bean使用其属性值进行初始化)。从技术上讲,它在构造函数调用和属性注入之间并不是线程安全的,但是我知道所有的Spring实现的块请求直到上下文初始化完成。

底线是:不要在Spring之外手动创建Factory对象,你应该没问题。