Spring MVC源码实现
2025-08-11 15:37:30 1 举报
AI智能生成
Spring MVC源码实现
作者其他创作
大纲/内容
DispatcherServlet的工作大致可以分为两个部分
HttpServletBean#init
ServletConfigPropertyValues#ServletConfigPropertyValues
HttpServletBean#initBeanWrapper
HttpServletBean#initServletBean
FrameworkServlet#initServletBean
FrameworkServlet#initWebApplicationContext
WebApplicationContextUtils#getWebApplicationContext()
getWebApplicationContext(sc, WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)
FrameworkServlet#configureAndRefreshWebApplicationContext
FrameworkServlet#postProcessWebApplicationContext
FrameworkServlet#applyInitializers
AbstractApplicationContext#refresh
FrameworkServlet#findWebApplicationContext
WebApplicationContextUtils#getWebApplicationContext()
FrameworkServlet#createWebApplicationContext()
BeanUtils#instantiateClass()
wac.setParent(parent);
FrameworkServlet#configureAndRefreshWebApplicationContext
DispatcherServlet#onRefresh
启动整个Spring MVC框架的初始化
Spring MVC 的九大组件的初始化
Spring MVC 的九大组件的初始化
DispatcherServlet#initStrategies
DispatcherServlet#initMultipartResolver
DispatcherServlet#initLocaleResolver(context);
DispatcherServlet#initThemeResolver(context);
DispatcherServlet#initHandlerMappings(context);
BeanFactoryUtils#beansOfTypeIncludingAncestors()
context.getBean("handlerMapping", HandlerMapping.class)
DispatcherServlet#getDefaultStrategies
DispatcherServlet#initHandlerAdapters(context);
DispatcherServlet#initHandlerExceptionResolvers(context);
DispatcherServlet#initRequestToViewNameTranslator(context);
DispatcherServlet#initViewResolvers(context);
DispatcherServlet#initFlashMapManager(context);
this.getServletContext().setAttribute(attrName, wac);
HttpServlet#doPost
FrameworkServlet#doPost
FrameworkServlet#processRequest
DispatcherServlet#doService
对HTTP请求参数进行快照处理
DispatcherServlet#doDispatch
HandlerExecutionChain=DispatcherServlet#getHandler
使用HandlerMapping完成请求的映射处理
AbstractHandlerMapping#getHandler
AbstractUrlHandlerMapping#getHandlerInternal(request)
AbstractHandlerMapping#initLookupPath(request)
AbstractUrlHandlerMapping#lookupHandler(path,lookupPath, request)
AbstractHandlerMapping#getDefaultHandler()
ApplicationObjectSupport#obtainApplicationContext()
AbstractApplicationContext#getBean(handlerName)
AbstractHandlerMapping#getHandlerExecutionChain(handler, request)
DispatcherServlet#getHandlerAdapter
HandlerExecutionChain#applyPreHandle
for(int i = 0; i < this.interceptorList.size(); this.interceptorIndex = i++) {
interceptor.preHandle(request, response, this.handler)
AbstractHandlerMethodAdapter#handle
RequestMappingHandlerAdapter#handleInternal
RequestMappingHandlerAdapter#invokeHandlerMethod
ServletInvocableHandlerMethod#invokeAndHandle
DispatcherServlet#applyDefaultViewName
HandlerExecutionChain#applyPostHandle
for(int i = this.interceptorList.size() - 1; i >= 0; --i)
interceptor.postHandle(request, response, this.handler, mv)
DispatcherServlet#processDispatchResult
DispatcherServlet#processHandlerException
DispatcherServlet#render
AbstractLocaleContextResolver#resolveLocale
DispatcherServlet#resolveViewName
BeanNameViewResolver#resolveViewName
AbstractView#render
DispatcherServlet#triggerAfterCompletion
DispatcherServlet#cleanupMultipart
SimpleUrlHandlerMapping注册过程
SimpleUrlHandlerMapping#initApplicationContext
AbstractHandlerMapping#initApplicationContext
AbstractHandlerMapping#extendInterceptors
AbstractHandlerMapping#detectMappedInterceptors
AbstractHandlerMapping#initInterceptors
SimpleUrlHandlerMapping#registerHandlers
AbstractUrlHandlerMapping#registerHandler()
resolvedHandler = applicationContext.getBean(handlerName)
urlPath.equals("/")
AbstractUrlHandlerMapping#setRootHandler
urlPath.equals("/*")
AbstractHandlerMapping#setDefaultHandler
handlerMap.put(urlPath, resolvedHandler)
Spring Web容器中的上下文设计
XmlWebApplicationContext中IoC容器的具体启动过程
XmlWebApplicationContext#loadBeanDefinitions(beanFactory)
XmlBeanDefinitionReader#XmlBeanDefinitionReader(beanFactory)
beanDefinitionReader.setResourceLoader(this)
XmlWebApplicationContext#initBeanDefinitionReader(beanDefinitionReader)
XmlWebApplicationContext#loadBeanDefinitions(beanDefinitionReader)
AbstractRefreshableWebApplicationContext#getConfigLocations
XmlWebApplicationContext#getDefaultConfigLocations
new String[]{"/WEB-INF/applicationContext.xml"
AbstractBeanDefinitionReader#loadBeanDefinitions(configLocation)
在Web应用程序启动时载入IOC容器(或者称为WebApplicationContext)
ContextLoaderListener#contextInitialized(ServletContextEvent)
开始对WebApplicationContext进行初始化
ContextLoader#initWebApplicationContext(servletContext)
ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE = WebApplicationContext.class.getName() + ".ROOT"
ContextLoader#createWebApplicationContext(servletContext)
ContextLoader#determineContextClass
ApplicationContext#getInitParameter("contextClass")
defaultStrategies.getProperty(WebApplicationContext.class.getName())
BeanUtils#instantiateClass()
ContextLoader#loadParentContext(servletContext)
ContextLoader#configureAndRefreshWebApplicationContext
设置servletContext以及配置文件的位置参数
setServletContext
setConfigLocation
StandardServletEnvironment#initPropertySources
WebApplicationContextUtils#initServletPropertySources()
ContextLoader#customizeContext
AbstractApplicationContext#refresh
0 条评论
下一页