一、spring mvc的流程:
spi-Mete-info/接口 spring-web包里面META-INFO里面有个文件->SpringServletContainerInitializer - > AbstractDispatcherServletInitializer--onStartup->super.onStartup(servletContext)(监听器加载)
->registerDispatcherServlet(servletContext);(注册DispatcherServlet)
监听器容器启动的时候执行默认方法自动加载spring的配置:
ContextLoaderListener->contextInitialized()->initWebApplicationContext()->configureAndRefreshWebApplicationContext(spring容器的refresh执行)
registerDispatcherServlet->createServletApplicationContext(mvc的配置)->createDispatcherServlet(创建中心servlet)->
加载流程:
DispatcherServlet是一个sevlet所以从父类的init方法进入:
HttpServletBean->init->initServletBean->FrameworkServlet->initServletBean-> initWebApplicationContext->configureAndRefreshWebApplicationContext(执行spring容器刷新)
---- 到现在为止web中的监听器和DispatcherServlet全都可以加载了
二、mvc配置说明 - 注解配置通过钩子函数调用加载的,方法的registry就是框架内部已经实例化的
@EnableWebMvc - >DelegatingWebMvcConfiguration - >setConfigurers(WebMvcConfigurer接口的实现类注入进来)-> 父类WebMvcConfigurationSupport中所有的@bean注解方法->加载所有需要的类信息(handle)
@EnableWebMvc注解加载的handler赋值给DispatcherServlet?FrameworkServlet.ContextRefreshListener(初始化完成默认进来)->onApplicationEvent->onRefresh->initStrategies()赋值完成
三、映射关系的建立
handleMapping启动的时候会加载->AbstractHandlerMethodMapping->afterPropertiesSet->processCandidateBean()->detectHandlerMethods(url和方法映射)->
本文版权归原作者所有,不可商用,转载需要声明出处,否则保留追究法律责任的权利。如果文中有什么错误,欢迎指出。以免更多的人被误导。