SpringMvc核心源码分析

1.spring启动流程
org.springframework.web.servlet.DispatcherServlet看这个核心类

SpringMvc核心源码分析_第1张图片

执行流程如下:一定是先初始化父类的init()

javax.servlet.Servlet#init

javax.servlet.GenericServlet#init(javax.servlet.ServletConfig)

javax.servlet.GenericServlet#init()

org.springframework.web.servlet.HttpServletBean#init

org.springframework.web.servlet.HttpServletBean#initServletBean

org.springframework.web.servlet.FrameworkServlet#initServletBean

SpringMvc核心源码分析_第2张图片

 

 这里设置了容器和配置文件,并且添加了一个容器刷新监听事件 

 
  

SpringMvc核心源码分析_第3张图片

 这个applicationListeners里面有个容器刷新事件

SpringMvc核心源码分析_第4张图片

这里就开始初始化spring容器了。 

注意:我们开启了这个注解,在启动spring的时候会解析对应的bean到容器中


org.springframework.web.servlet.config.MvcNamespaceHandler#init

org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser#parse

spring会注入这些bean,后续用的到: 2个映射器,3个适配器
RequestMappingHandlerMapping,
SimpleUrlHandlerMapping,
RequestMappingHandlerAdapter

然后看这个org.springframework.web.servlet.handler.AbstractHandlerMethodMapping类,会初始化所有的method,url关系到mappingRegistry中

SpringMvc核心源码分析_第5张图片

 

org.springframework.web.servlet.handler.AbstractHandlerMethodMapping#detectHandlerMethods

遍历类中所有的方法,然后封装成RequestMappingInfo

org.springframework.web.servlet.handler.AbstractHandlerMethodMapping#registerHandlerMethod

 将映射关系,url,方法注入到mappingRegistry中,后续doDispatcher的时候用得到

SpringMvc核心源码分析_第6张图片

 最后spring刷新的时候,会发布一个刷新的事件,之前已经注册了一个监听刷新事件,所以这时候会回调,

org.springframework.web.servlet.FrameworkServlet.ContextRefreshListener

SpringMvc核心源码分析_第7张图片

终于到了springmvc的部分了,初始化9大组件 

org.springframework.web.servlet.DispatcherServlet#initStrategies

SpringMvc核心源码分析_第8张图片

 org.springframework.web.servlet.DispatcherServlet#initHandlerMappings

SpringMvc核心源码分析_第9张图片

 

handlerMappings就是之前我们注册过的bean,这里用到了,就这样,springmvc初始化完成了。

你可能感兴趣的:(java)