SpringMVC源码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SpringMVC源码
SpringMVC的本质就是⼀个dispatcherServlet。
DispatcherServlet的创建过程主要是对9⼤组件进⾏初始化。
DispatcherServlet的onRefresh⽅法调⽤了initStrategies⽅法,在initStrategies 中初始化了组件。
// 两个⽅法的参数context是WebApplicationContext,⽽不是ServletContext。
// DispatcherServlet的⽗类FrameworkServlet初始化了WebApplicationContext。
protected void onRefresh(ApplicationContext context) {
this.initStrategies(context);
}
protected void initStrategies(ApplicationContext context) {
this.initMultipartResolver(context);
this.initLocaleResolver(context);
this.initThemeResolver(context);
this.initHandlerMappings(context);
this.initHandlerAdapters(context);
this.initHandlerExceptionResolvers(context);
this.initRequestToViewNameTranslator(context);
this.initViewResolvers(context);
this.initFlashMapManager(context);
}
初始化某个组件时,⾸先在容器⾥按注册时的名称或类型查找(所以在springMVC的配置⽂件中只需要配置相应类型的组件容器就可以⾃动找到),如果找不到就调⽤getDefaultStrategy使⽤默认的组件。
当使⽤<mvc:annotation-driven/>后,就不会全部使⽤默认组件了,因为它配置了HandlerMapping、HandlerAdapter、HandlerExceptionResolver。
上传⽂件组件MultipartResolver是没有默认配置的,因为并不是每个应⽤都需要上传⽂件,需要上传也不⼀定就要使⽤MultipartResolver。