Spring3.2请求处理大致过程(一)

2014-11-24 10:55:38 · 作者: · 浏览: 0
处理过程
初始化:
DispatcherServlet.onRefresh()
DispatcherServlet.initStrategies()
DispatcherServlet.initHandlerMappings()
处理请求:
DispatcherServlet.doDispatch()
RequestMappingHandlerAdapter.handle()
RequestMappingHandlerAdapter.handleInternal()
RequestMappingHandlerAdapter.invokeHandleMethod()
WebAsyncManager.setTaskExecutor()
WebAsyncManager.setAsyncWebRequest()
WebAsyncManager.registerCallableInterceptors()
WebAsyncManager.registerDeferredResultInterceptors()
ServletInvocableHandlerMethod.invokeAndHandle()
CallableMethodReturnValueHandler/DeferredResultMethodReturnValueHandler.handleReturnValue()
WebAsyncManager.startCallableProcessing()/WebAsyncManager.startDeferredResultProcessing()
代码详述
DispatcherServlet.java
在onRefresh时,初始化
[java]
/**
* This implementation calls {@link #initStrategies}.
*/
@Override
protected void onRefresh(ApplicationContext context) {
initStrategies(context);
}
/**
* Initialize the strategy objects that this servlet uses.
*

May be overridden in subclasses in order to initialize further strategy objects.

*/
protected void initStrategies(ApplicationContext context) {
initMultipartResolver(context);
initLocaleResolver(context);
initThemeResolver(context);
initHandlerMappings(context);//初始化Handler映射,例如@RequestMapping(value = "/something", method = RequestMethod.PUT)
initHandlerAdapters(context);
initHandlerExceptionResolvers(context);
initRequestToViewNameTranslator(context);
initViewResolvers(context);
initFlashMapManager(context);
}
/**
* Initialize the HandlerMappings used by this class.
*

If no HandlerMapping beans are defined in the BeanFactory for this namespace,

* we default to BeanNameUrlHandlerMapping.
*/
private void initHandlerMappings(ApplicationContext context) {
this.handlerMappings = null;
if (this.detectAllHandlerMappings) {
// Find all HandlerMappings in the ApplicationContext, including ancestor contexts.
Map matchingBeans =
BeanFactoryUtils.beansOfTypeIncludingAncestors(context, HandlerMapping.class, true, false);//从Context中,找@RequestMapping,构建映射关系
if (!matchingBeans.isEmpty()) {
this.handlerMappings = new ArrayList(matchingBeans.values());
// We keep HandlerMappings in sorted order.
OrderComparator.sort(this.handlerMappings);
}
}
else {
try {
HandlerMapping hm = context.getBean(HANDLER_MAPPING_BEAN_NAME, HandlerMapping.class);//缺省
this.handlerMappings = Collections.singletonList(hm);
}
catch (NoSuchBeanDefinitionException ex) {
// Ignore, we'll add a default HandlerMapping later.
}
}
// Ensure we have at least one HandlerMapping, by registering
// a default HandlerMapping if no other mappings are found.
if (this.handlerMappings == null) {