1.spring启动流程
org.springframework.web.servlet.DispatcherServlet看这个核心类
执行流程如下:一定是先初始化父类的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
这里设置了容器和配置文件,并且添加了一个容器刷新监听事件
这个applicationListeners里面有个容器刷新事件
这里就开始初始化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中
org.springframework.web.servlet.handler.AbstractHandlerMethodMapping#detectHandlerMethods
遍历类中所有的方法,然后封装成RequestMappingInfo
org.springframework.web.servlet.handler.AbstractHandlerMethodMapping#registerHandlerMethod
将映射关系,url,方法注入到mappingRegistry中,后续doDispatcher的时候用得到
最后spring刷新的时候,会发布一个刷新的事件,之前已经注册了一个监听刷新事件,所以这时候会回调,
org.springframework.web.servlet.FrameworkServlet.ContextRefreshListener
终于到了springmvc的部分了,初始化9大组件
org.springframework.web.servlet.DispatcherServlet#initStrategies
org.springframework.web.servlet.DispatcherServlet#initHandlerMappings
handlerMappings就是之前我们注册过的bean,这里用到了,就这样,springmvc初始化完成了。