SpringMVC九大组件与组件初始化原理

一,九大组件

坐标 dispatchServlet

/** MultipartResolver used by this servlet. */
	//多部件解析器
	@Nullable
	private MultipartResolver multipartResolver;

	/** LocaleResolver used by this servlet. */
	//区域化 国际化解析器
	@Nullable
	private LocaleResolver localeResolver;

	/** ThemeResolver used by this servlet. */
	//主题解析器
	@Nullable
	private ThemeResolver themeResolver;

	/** List of HandlerMappings used by this servlet. */
	//处理器映射组件
	@Nullable
	private List<HandlerMapping> handlerMappings;

	/** List of HandlerAdapters used by this servlet. */
	//处理器适配器组件
	@Nullable
	private List<HandlerAdapter> handlerAdapters;

	/** List of HandlerExceptionResolvers used by this servlet. */
	//异常解析器
	@Nullable
	private List<HandlerExceptionResolver> handlerExceptionResolvers;

	/** RequestToViewNameTranslator used by this servlet. */
	// 默认视图名转换器组件
	@Nullable
	private RequestToViewNameTranslator viewNameTranslator;

	/** FlashMapManager used by this servlet. */
	// Flash属性管理组件
	@Nullable
	private FlashMapManager flashMapManager;

	/** List of ViewResolvers used by this servlet. */
	//视图解析器
	@Nullable
	private List<ViewResolver> viewResolvers;

二,九大组件初始化位置

坐标: DispatchServlet OnRefresh方法。

 三,初始化调用方法onRefresh堆栈

AbstractApplicationContext --> refresh方法中 finishRefresh方法

SimpleApplicationEventMulticaster -》 doInvokeListener方法,以一种事件监听的方式去加载九大组件初始化策略

 按照SourceFilteringListener -》 GenericApplicationListenerAdapter-》FrameworkServlet顺序调用onApplicationEvent方法最终调用九大组件初始化方法。

 四,initHandlerMappings初始化

If的判断: 可以通过配置该属性选择HandlerMapping初始化的方式。

SpringMVC的接口化插件: 九大组件的存入方式可以发现都是接口,接口提供了规范性,比如要自己去做一个Handler插件,那么就要去实现HandlerMapping接口

如果获取到的HandlerMapping为NULL,那么还会提供一个默认实例化策略去完成

 进入到默认策略生成HandlerMapping的方法, key值为HandlerMapping.class,这里重点放在defautlStrategies容器是如何初始化的。反向追踪,发现通过默认地址加载配置获取的class存入Properties中。默认地址DispatcherServlet.properties

 全局搜索这个文件,可以看到该文件为九大组件默认加载配置类的文件,到这里位置,后面不在对其它的组件初始化做具体的分析,基本上原理一直,默认加载的方法这里用到了策略模式,提供了统一的策略生成手段。 

猜你喜欢

转载自blog.csdn.net/qq_42773863/article/details/120473295