SpringMVC源码分析--容器初始化(五)DispatcherServlet
来源:互联网 发布:stc15单片机 编辑:程序博客网 时间:2024/05/23 11:45
本文为转载,地址:http://blog.csdn.NET/qq924862077/
上一篇博客SpringMVC源码分析--容器初始化(四)FrameworkServlet我们已经了解到了SpringMVC容器的初始化,SpringMVC对容器初始化后会进行一系列的其他属性的初始化操作,在SpringMVC初始化完成之后会调用onRefresh(wac)方法,它通过模板方式在子类DispatcherServlet中实现的。
onRefresh函数实现如下,其具体的实现就放到initStrategies函数中实现。
-
-
-
-
- @Override
- protected void onRefresh(ApplicationContext context) {
- initStrategies(context);
- }
initStrategies函数中初始化了一些springMVC运行过程中需要使用的默认的实现类,接下来我们分别介绍一下默认实现的 类。
-
- rotected void initStrategies(ApplicationContext context) {
- initMultipartResolver(context);
- initLocaleResolver(context);
- initThemeResolver(context);
- initHandlerMappings(context);
- initHandlerAdapters(context);
- initHandlerExceptionResolvers(context);
- initRequestToViewNameTranslator(context);
- initViewResolvers(context);
- initFlashMapManager(context);
initMultipartResolver初始化文件上传解析器,与文件上传的相关的操作,有关文件上传操作我们会仔细分析,这里不做过多介绍。
-
- rivate void initMultipartResolver(ApplicationContext context) {
- try {
-
- this.multipartResolver = context.getBean(MULTIPART_RESOLVER_BEAN_NAME, MultipartResolver.class);
- if (logger.isDebugEnabled()) {
- logger.debug("Using MultipartResolver [" + this.multipartResolver + "]");
- }
- }
- catch (NoSuchBeanDefinitionException ex) {
-
- this.multipartResolver = null;
- if (logger.isDebugEnabled()) {
- logger.debug("Unable to locate MultipartResolver with name '" + MULTIPART_RESOLVER_BEAN_NAME +
- "': no multipart request handling provided");
- }
- }
initLocaleResolver是初始化一些多语言实现相关的类,在配置多语言本地化时会注入bean名称为localeResolver,默认实现的类有FixedLocaleResolver ,SessionLocaleResolver ,CookieLocaleResolver, AcceptHeaderLocaleResolver
-
-
-
-
- private void initLocaleResolver(ApplicationContext context) {
- try {
-
- this.localeResolver = context.getBean(LOCALE_RESOLVER_BEAN_NAME, LocaleResolver.class);
- if (logger.isDebugEnabled()) {
- logger.debug("Using LocaleResolver [" + this.localeResolver + "]");
- }
- }
- catch (NoSuchBeanDefinitionException ex) {
-
- this.localeResolver = getDefaultStrategy(context, LocaleResolver.class);
- if (logger.isDebugEnabled()) {
- logger.debug("Unable to locate LocaleResolver with name '" + LOCALE_RESOLVER_BEAN_NAME +
- "': using default [" + this.localeResolver + "]");
- }
- }
- }
initThemeResolver与样式相关的解析器,需要在配置文件中注入bean名称为themeResolver的,FixedThemeResolver, SessionThemeResolver和CookieThemeResolver
-
- private void initThemeResolver(ApplicationContext context) {
- try {
-
- this.themeResolver = context.getBean(THEME_RESOLVER_BEAN_NAME, ThemeResolver.class);
- if (logger.isDebugEnabled()) {
- logger.debug("Using ThemeResolver [" + this.themeResolver + "]");
- }
- }
- catch (NoSuchBeanDefinitionException ex) {
-
- this.themeResolver = getDefaultStrategy(context, ThemeResolver.class);
- if (logger.isDebugEnabled()) {
- logger.debug(
- "Unable to locate ThemeResolver with name '" + THEME_RESOLVER_BEAN_NAME + "': using default [" +
- this.themeResolver + "]");
- }
- }
- }
initHandlerMappings初始化HandlerMapping,HandlerMapping的工作就是为每个请求找到合适的请求找到一个处理器handler-
- private void initHandlerMappings(ApplicationContext context) {
- this.handlerMappings = null;
-
- if (this.detectAllHandlerMappings) {
-
-
- Map<String, HandlerMapping> matchingBeans =
- BeanFactoryUtils.beansOfTypeIncludingAncestors(context, HandlerMapping.class, true, false);
- if (!matchingBeans.isEmpty()) {
-
- this.handlerMappings = new ArrayList<HandlerMapping>(matchingBeans.values());
-
- AnnotationAwareOrderComparator.sort(this.handlerMappings);
- }
- }
- else {
- try {
- HandlerMapping hm = context.getBean(HANDLER_MAPPING_BEAN_NAME, HandlerMapping.class);
- this.handlerMappings = Collections.singletonList(hm);
- }
- catch (NoSuchBeanDefinitionException ex) {
-
- }
- }
-
-
-
- if (this.handlerMappings == null) {
- this.handlerMappings = getDefaultStrategies(context, HandlerMapping.class);
- if (logger.isDebugEnabled()) {
- logger.debug("No HandlerMappings found in servlet '" + getServletName() + "': using default");
- }
- }
- }
initHandlerAdapters是初始化HandlerAdapter,
HandlerAdapter是真正调用Controller操作的类-
- private void initHandlerAdapters(ApplicationContext context) {
- this.handlerAdapters = null;
-
- if (this.detectAllHandlerAdapters) {
-
- Map<String, HandlerAdapter> matchingBeans =
- BeanFactoryUtils.beansOfTypeIncludingAncestors(context, HandlerAdapter.class, true, false);
- if (!matchingBeans.isEmpty()) {
-
- this.handlerAdapters = new ArrayList<HandlerAdapter>(matchingBeans.values());
-
- AnnotationAwareOrderComparator.sort(this.handlerAdapters);
- }
- }
- else {
- try {
- HandlerAdapter ha = context.getBean(HANDLER_ADAPTER_BEAN_NAME, HandlerAdapter.class);
- this.handlerAdapters = Collections.singletonList(ha);
- }
- catch (NoSuchBeanDefinitionException ex) {
-
- }
- }
-
-
-
- if (this.handlerAdapters == null) {
- this.handlerAdapters = getDefaultStrategies(context, HandlerAdapter.class);
- if (logger.isDebugEnabled()) {
- logger.debug("No HandlerAdapters found in servlet '" + getServletName() + "': using default");
- }
- }
- }
initHandlerExceptionResolvers是初始化HandlerExceptionResolver,用来操作异常,接下来我们会对其进行详细分析
-
- rivate void initHandlerExceptionResolvers(ApplicationContext context) {
- this.handlerExceptionResolvers = null;
-
- if (this.detectAllHandlerExceptionResolvers) {
-
- Map<String, HandlerExceptionResolver> matchingBeans = BeanFactoryUtils
- .beansOfTypeIncludingAncestors(context, HandlerExceptionResolver.class, true, false);
- if (!matchingBeans.isEmpty()) {
- this.handlerExceptionResolvers = new ArrayList<HandlerExceptionResolver>(matchingBeans.values());
-
- AnnotationAwareOrderComparator.sort(this.handlerExceptionResolvers);
- }
- }
- else {
- try {
- HandlerExceptionResolver her =
- context.getBean(HANDLER_EXCEPTION_RESOLVER_BEAN_NAME, HandlerExceptionResolver.class);
- this.handlerExceptionResolvers = Collections.singletonList(her);
- }
- catch (NoSuchBeanDefinitionException ex) {
-
- }
- }
-
-
-
- if (this.handlerExceptionResolvers == null) {
- this.handlerExceptionResolvers = getDefaultStrategies(context, HandlerExceptionResolver.class);
- if (logger.isDebugEnabled()) {
- logger.debug("No HandlerExceptionResolvers found in servlet '" + getServletName() + "': using default");
- }
- }
initRequestToViewNameTranslator是初始化到ViewName的处理器。
-
- private void initRequestToViewNameTranslator(ApplicationContext context) {
- try {
- this.viewNameTranslator =
- context.getBean(REQUEST_TO_VIEW_NAME_TRANSLATOR_BEAN_NAME, RequestToViewNameTranslator.class);
- if (logger.isDebugEnabled()) {
- logger.debug("Using RequestToViewNameTranslator [" + this.viewNameTranslator + "]");
- }
- }
- catch (NoSuchBeanDefinitionException ex) {
-
- this.viewNameTranslator = getDefaultStrategy(context, RequestToViewNameTranslator.class);
- if (logger.isDebugEnabled()) {
- logger.debug("Unable to locate RequestToViewNameTranslator with name '" +
- REQUEST_TO_VIEW_NAME_TRANSLATOR_BEAN_NAME + "': using default [" + this.viewNameTranslator +
- "]");
- }
- }
- }
initViewResolvers初始化View的解析器
-
- private void initViewResolvers(ApplicationContext context) {
- this.viewResolvers = null;
-
- if (this.detectAllViewResolvers) {
-
- Map<String, ViewResolver> matchingBeans =
- BeanFactoryUtils.beansOfTypeIncludingAncestors(context, ViewResolver.class, true, false);
- if (!matchingBeans.isEmpty()) {
- this.viewResolvers = new ArrayList<ViewResolver>(matchingBeans.values());
-
- AnnotationAwareOrderComparator.sort(this.viewResolvers);
- }
- }
- else {
- try {
- ViewResolver vr = context.getBean(VIEW_RESOLVER_BEAN_NAME, ViewResolver.class);
- this.viewResolvers = Collections.singletonList(vr);
- }
- catch (NoSuchBeanDefinitionException ex) {
-
- }
- }
-
-
-
- if (this.viewResolvers == null) {
- this.viewResolvers = getDefaultStrategies(context, ViewResolver.class);
- if (logger.isDebugEnabled()) {
- logger.debug("No ViewResolvers found in servlet '" + getServletName() + "': using default");
- }
- }
- }
initFlashMapManager初始化FlashMapManager,与链接跳转相关的。
-
- rivate void initFlashMapManager(ApplicationContext context) {
- try {
- this.flashMapManager =
- context.getBean(FLASH_MAP_MANAGER_BEAN_NAME, FlashMapManager.class);
- if (logger.isDebugEnabled()) {
- logger.debug("Using FlashMapManager [" + this.flashMapManager + "]");
- }
- }
- catch (NoSuchBeanDefinitionException ex) {
-
- this.flashMapManager = getDefaultStrategy(context, FlashMapManager.class);
- if (logger.isDebugEnabled()) {
- logger.debug("Unable to locate FlashMapManager with name '" +
- FLASH_MAP_MANAGER_BEAN_NAME + "': using default [" + this.flashMapManager + "]");
- }
- }
0 0