Could I have multiple threads use the same static instance of HttpComponentsClientHttpRequestFactory to safely create their respective ClientHttpRequest?
I am not able to find any manual that would tell me the answer.
I am presuming it is thread-safe simply because the all createRequest methods actually perform a new instantiation of a request object. For example,
public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException {
HttpUriRequest httpRequest = createHttpUriRequest(httpMethod, uri);
postProcessHttpRequest(httpRequest);
return new HttpComponentsClientHttpRequest(getHttpClient(), httpRequest, createHttpContext(httpMethod, uri));
}
But then it calls a few other methods which may not be thread-safe.
In fact, if you do know the answer, where is the manual that would tell me the thread safety of anything in Spring?
Generally, any class within Spring infrastructure ending in Factory is thread-safe once it's initialized (i.e., once the constructor is called and the bean is initialized with its property values). Technically it's not thread-safe between constructor call and property injection, but all of the Spring ApplicationContext implementations I know of block requests for beans until context initialization is complete.
Bottom line is: don't create Factory objects outside of Spring manually and you should be fine.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With