Cache constructor instance in WebAsyncUtils

Issue: SPR-10673
This commit is contained in:
Rossen Stoyanchev 2013-07-18 12:13:02 -04:00
parent 860e56ea84
commit 9af1984b39
1 changed files with 9 additions and 4 deletions

View File

@ -36,6 +36,9 @@ public abstract class WebAsyncUtils {
public static final String WEB_ASYNC_MANAGER_ATTRIBUTE = WebAsyncManager.class.getName() + ".WEB_ASYNC_MANAGER";
private static Constructor<?> standardAsyncRequestConstructor;
/**
* Obtain the {@link WebAsyncManager} for the current request, or if not
* found, create and associate it with the request.
@ -80,10 +83,12 @@ public abstract class WebAsyncUtils {
private static AsyncWebRequest createStandardServletAsyncWebRequest(HttpServletRequest request, HttpServletResponse response) {
try {
String className = "org.springframework.web.context.request.async.StandardServletAsyncWebRequest";
Class<?> clazz = ClassUtils.forName(className, WebAsyncUtils.class.getClassLoader());
Constructor<?> constructor = clazz.getConstructor(HttpServletRequest.class, HttpServletResponse.class);
return (AsyncWebRequest) BeanUtils.instantiateClass(constructor, request, response);
if (standardAsyncRequestConstructor == null) {
String className = "org.springframework.web.context.request.async.StandardServletAsyncWebRequest";
Class<?> clazz = ClassUtils.forName(className, WebAsyncUtils.class.getClassLoader());
standardAsyncRequestConstructor = clazz.getConstructor(HttpServletRequest.class, HttpServletResponse.class);
}
return (AsyncWebRequest) BeanUtils.instantiateClass(standardAsyncRequestConstructor, request, response);
}
catch (Throwable t) {
throw new IllegalStateException("Failed to instantiate StandardServletAsyncWebRequest", t);