springmvc流程大致分析3 初始化springmvc编程元素
来源:互联网 发布:最新伤感网络歌曲 编辑:程序博客网 时间:2024/05/11 17:06
通过第2步的操作,已经初始化好了webApplicationContext上下文,并调用相应的方法将上下文通过DispatcherServlet的onRefresh方法,传入DispatcherServlet,其方法定义如下:
protected void onRefresh(ApplicationContext context) {initStrategies(context);}protected void initStrategies(ApplicationContext context) {initMultipartResolver(context);initLocaleResolver(context);initThemeResolver(context);initHandlerMappings(context);initHandlerAdapters(context);initHandlerExceptionResolvers(context);initRequestToViewNameTranslator(context);initViewResolvers(context);initFlashMapManager(context);}
以initHandlerMappings方法为例,其它方法的初始化逻辑都是相似的。
private void initHandlerMappings(ApplicationContext context) {this.handlerMappings = null;if (this.detectAllHandlerMappings) {// Find all HandlerMappings in the ApplicationContext, including ancestor contexts.Map<String, HandlerMapping> matchingBeans =BeanFactoryUtils.beansOfTypeIncludingAncestors(context, HandlerMapping.class, true, false);if (!matchingBeans.isEmpty()) {this.handlerMappings = new ArrayList<HandlerMapping>(matchingBeans.values());// We keep HandlerMappings in sorted order.OrderComparator.sort(this.handlerMappings);}}else {try {HandlerMapping hm = context.getBean(HANDLER_MAPPING_BEAN_NAME, HandlerMapping.class);this.handlerMappings = Collections.singletonList(hm);}catch (NoSuchBeanDefinitionException ex) {// Ignore, we'll add a default HandlerMapping later.}}// Ensure we have at least one HandlerMapping, by registering// a default HandlerMapping if no other mappings are found.if (this.handlerMappings == null) {this.handlerMappings = getDefaultStrategies(context, HandlerMapping.class);if (logger.isDebugEnabled()) {logger.debug("No HandlerMappings found in servlet '" + getServletName() + "': using default");}}}
其逻辑是:
1.判断detectAllHandlerMappings是否为true(默认是true),
|-如果true,则将上下文中所有类型是HandlerMapping的bean都添加到handlerMappings这个list
|-如果false,则将上下文中名字是handlerMapping的bean添加到一个只有1个元素的list中,并将这个list赋值给handlerMappings
2.经过第1步的操作如果handlerMappings依然为null,则调用getDefaultStrategies方法,由spring的默认策略初始化handlerMappings
getDefaultStrategies是一个范型的方法,承担所有SpringMVC编程元素的默认初始化策略。
方法的逻辑是:以传递类的名称为键,从defaultStrategies变量中获取具体的实现类,然后反射初始化。
而defaultStrategies变量的初始化,是在静态代码块中读取DispatcherServlet.properties初始化的。
0 0
- springmvc流程大致分析3 初始化springmvc编程元素
- SpringMVC请求大致处理流程
- springmvc流程大致分析1 ROOT上下文创建
- springmvc流程大致分析2 DispatcherServlet自带上下文创建
- springmvc流程大致分析4 DispatcherServlet请求转发
- SpringMVC运行流程分析
- springMVC运行流程分析
- SpringMVC工作流程分析
- SpringMVC 运行流程分析
- SpringMVC编程一般流程
- springMVC下载Excel表格功能的大致流程
- springMvc源码大致过程
- Nginx初始化大致流程
- springmvc----源码分析之springmvc执行流程
- 分析springmvc底层调用流程
- SpringMVC数据绑定流程分析
- SpringMVC-数据绑定流程分析
- SpringMVC-数据绑定流程分析
- BB美丽树
- RecyclerView学习
- 线程同步-CountDownLatch
- Maximum Subarray
- Java:按值传递还是按引用传递详细解说
- springmvc流程大致分析3 初始化springmvc编程元素
- angular开发总结
- WaitForSingleObject 等待线程句柄
- django入门与学习-模板的基本使用-4
- 状压DP——hihoCoder 1044
- 重建二叉树(前序,中序序列建树)
- 利用PHP的缓冲区机制生成静态化界面
- 王垠的过去和现状
- json格式须知