Spring Framework HttpComponentsClientHttpRequestFactory线程安全吗?

时间:2013-11-14 19:41:04

标签: java spring thread-safety

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

我无法找到任何可以告诉我答案的手册。

我认为它是线程安全的,因为所有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 个答案:

答案 0 :(得分:5)

通常,Spring Factory中结束的任何类在初始化后都是线程安全的(即,一旦调用构造函数并使用其属性值初始化bean)。从技术上讲,它在构造函数调用和属性注入之间不是线程安全的,但是我所知道的所有Spring ApplicationContext实现都阻塞了对bean的请求,直到上下文初始化完成。

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