DispatcherServlet的初始化流程
2022-11-28 15:07:00 5 举报
主要是配置文件的形式的DispatcherServlet初始化流程,感觉大同小异,大家做个参考
作者其他创作
大纲/内容
GenericServlet#init()
还是这个解析器XmlBeanDefinitionReader
开始
//初始化上传文件解析器(或者是多部分请求解析器)initMultipartResolver(context);//初始化本地化解析器initLocaleResolver(context);//初始化主题解析器initThemeResolver(context);//初始化处理器映射器initHandlerMappings(context);//初始化处理器适配器initHandlerAdapters(context);//初始化处理器异常解析器initHandlerExceptionResolvers(context);//初始化请求到视图名翻译器initRequestToViewNameTranslator(context);//初始化视图解析器initViewResolvers(context);//初始化重定向数据管理器initFlashMapManager(context);
initHandlerMappings()
HttpServletBean#init0
值得深入研究一下内部原理
结束
设置父容器
DispatcherServlet#onRefresh(wac);
web容器初始化
调用servlet的init方法
initWebApplicationContext();
内
将当前HttpServletBean对象转换成BeanWrapper对象进行一步的初始化参数,保证值能够被注入
初始化spring-mvc容器
HttpServletBean主要做一些初始化的工作,将web.xml中配置的参数设置到Servlet中。比如servlet标签的子标签init-param标签中配置的参数。
这不就是spring的扩展点吗
容器初始化时Servlet的init方法调用GenericServlet的init,如果是tomcat启动会调用DefaultServlet的init()方法进行初始化容器。第一次调取接口的时候>>>调用GenericServlet的init()初始化子类HttpServletBean的init()方法,最后会调取initServletBean();
FrameworkServlet
创建自定义的编辑器如果遇到了Resouce类型则使用ResourceEditor进行解析
关键点是自定义的标签解析器
public void init(ServletConfig config) { this.config = config; this.init(); }
1、在ContextLoaderListener的contextInitialized方法回调完毕之后,2、Root WebApplicationContext初始化完毕,3、随后会初始化全部的Filter,并且执行init回调,4、最后会按顺序初始化全部的即时创建的Servlet,5、对于Spring MVC来说,最重要的就是DispatcherServlet,6、该过程同时会涉及到MVC子容器的创建和初始化,7、以及各种MVC组件的初始化。
this.init 的方法被子类httpServletBean实现,所以会调用
内部
关键的是getServletConfig()获取了Servlet的配置对象,我们知道此对象是用于获取在加载web.xml的时候一个Servlet节点的配置信息的读取init-param内的内容并传入一个的set集合用于存储参数的名称方便下面的调用
可以知道<mvc:annotation-driven >标签是由AnnotationDrivenBeanDefinitionParser这个解析器来解析的。
configureAndRefreshWebApplicationContext(cwac);
initStrategies(context);
<mvc:annotation-driven >
HttpSerlvetBean继承自HttpServlet,它覆写了init方法,对初始化过程做了一些处理
获得 rootContext 内部是获取ServletContext的attribute key为WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
FrameworkServlet#initServletBean()
initFrameworkServlet();空实现
给ConfigurableWebApplicationContext设置各种属性
又来到refresh()方法
initBeanWrapper(bw)主要用于扩展时使用为子类实现
初始化SpringMVC的基础组件
0 条评论
回复 删除
下一页