`

spring源码学习系列3.1-handlerMapping初始化

阅读更多
SimpleUrlHandlerMapping的继承体系
org.springframework.web.servlet.handler
Class SimpleUrlHandlerMapping

java.lang.Object
  org.springframework.context.support.ApplicationObjectSupport
    org.springframework.web.context.support.WebApplicationObjectSupport
      org.springframework.web.servlet.handler.AbstractHandlerMapping
        org.springframework.web.servlet.handler.AbstractUrlHandlerMapping
          org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
All Implemented Interfaces:
Aware, ApplicationContextAware, Ordered, ServletContextAware, MatchableHandlerMapping, HandlerMapping
Direct Known Subclasses:
WebSocketHandlerMapping



SimpleUrlHandlerMapping是springioc启动时,初始化单例类时实例化?还是在initHandlerMappings(context);
Map<String, HandlerMapping> matchingBeans =
					BeanFactoryUtils.beansOfTypeIncludingAncestors(context, HandlerMapping.class, true, false);
初始化?


<listener/>与<servlet/>是并行执行吗?还是listener执行完加载servlet



ApplicationObjectSupport#setApplicationContext
public final void setApplicationContext(ApplicationContext context) throws BeansException {
    ...
    initApplicationContext(context);
    ...
}

由于ApplicationObjectSupport实现了ApplicationContextAware,初始化SimpleUrlHandlerMapping时,会调用setApplicationContext

ApplicationObjectSupport#initApplicationContext
protected void initApplicationContext(ApplicationContext context) throws BeansException {
		initApplicationContext();
	}



SimpleUrlHandlerMapping#initApplicationContext
@Override
	public void initApplicationContext() throws BeansException {
//1 初始化拦截器
		super.initApplicationContext();
//2 初始化请求地址与处理器的映射,初始化AbstractUrlHandlerMapping.handlerMap
		registerHandlers(this.urlMap);
	}


AbstractHandlerMapping#initApplicationContext
@Override
	protected void initApplicationContext() throws BeansException {
		extendInterceptors(this.interceptors);
//1.1 处理mapperInterceptors
		detectMappedInterceptors(this.mappedInterceptors);
//1.2 处理mapperInterceptors和adaptedInterceptors
		initInterceptors();
	}


AbstractHandlerMapping#detectMappedInterceptors
//1.1 处理mapperInterceptors
protected void detectMappedInterceptors(List<MappedInterceptor> mappedInterceptors) {
		mappedInterceptors.addAll(
				BeanFactoryUtils.beansOfTypeIncludingAncestors(
						getApplicationContext(), MappedInterceptor.class, true, false).values());
	}



AbstractHandlerMapping#detectMappedInterceptors
//1.2 处理mapperInterceptors和adaptedInterceptors
protected void initInterceptors() {
		if (!this.interceptors.isEmpty()) {
			for (int i = 0; i < this.interceptors.size(); i++) {
				Object interceptor = this.interceptors.get(i);
				if (interceptor == null) {
					throw new IllegalArgumentException("Entry number " + i + " in interceptors array is null");
				}
				if (interceptor instanceof MappedInterceptor) {
					this.mappedInterceptors.add((MappedInterceptor) interceptor);
				}
				else {
					this.adaptedInterceptors.add(adaptInterceptor(interceptor));
				}
			}
		}
	}


参考:
拦截器:
http://www.cnblogs.com/fangjian0423/p/springMVC-interceptor.html
https://my.oschina.net/alextong/blog/97310
分享到:
评论

相关推荐

    深入剖析Spring Web源码

    - `DispatcherServlet`初始化时会创建并配置一系列的`HandlerMapping`、`HandlerAdapter`和`ViewResolver`等组件。 - **3.1.3 根共享环境的加载** - 在`DispatcherServlet`初始化过程中,会加载一个或多个配置文件...

    SpringMVC jar包合集

    核心 jar 包可能包括 spring-webmvc,它包含了 DispatcherServlet、HandlerMapping、Controller 等关键组件。 - DispatcherServlet 是整个流程的入口,它负责接收请求,分发到相应的处理器。 3. **Web 相关支持**...

    Spring3学习教程

    它负责初始化HandlerMapping、ViewResolver等组件,并在每次HTTP请求到达时,通过这些组件来处理请求。 ##### 3.2 HandlerMapping HandlerMapping接口定义了如何将一个请求映射到具体的处理器(Handler)。Spring ...

    最全最经典spring_mvc教程

    - **初始化**: 初始化时可以设置属性或执行预处理任务。 - **请求处理**: 处理用户请求。 - **清理**: 清理资源或执行后处理任务。 **5.4 错误处理** - **异常处理**: 使用@ControllerAdvice注解的类处理异常。 - ...

    深入剖析Spring_Web源码.pdf

    - **4.1.3 根共享环境的加载**:这里涉及到Spring的初始化过程,包括ApplicationContext的创建和配置信息的加载。 - **4.1.4 其他Servlet**:除了DispatcherServlet之外,Spring Web MVC还支持其他类型的Servlet。 ...

    看透springMvc源代码分析与实践

    - 初始化策略接口:初始化如视图解析器(ViewResolver)、处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)等。 - 请求分发:将请求转发到合适的处理器(Controller)。 #### 2.2 HandlerMapping ...

    springMVC学习笔记

    默认情况下,`DispatcherServlet`会加载`/WEB-INF/&lt;servletName&gt;-servlet.xml`的配置文件来初始化Spring容器。我们可以自定义配置文件的位置和名称。 ```xml &lt;web-app xmlns:xsi=...

    精通spring(part 4)共分5个part (罗时飞)

    本书旨在为读者提供一个全面、深入的Spring框架学习资源,特别是针对其在Java 2EE平台上的应用。 ### 一、Spring框架概述 #### 1.1 Spring框架简介 Spring框架是由Rod Johnson创建的一个开源框架,它最初是为了...

    springmvc实例

    SQL文件可能包含数据库的初始化脚本,用于创建Spring MVC应用可能需要的数据表和示例数据。这有助于快速设置数据库环境,进行测试或演示。 总的来说,这个实例提供了一个完整的Spring MVC开发环境,包括了框架的...

    10 Spring.doc

    可以通过 init-method 和 destroy-method 属性指定 Bean 初始化和销毁时执行的方法。 三、Spring 框架 IoC 特性 3.1 IoC(Inversion of Control)概念 IoC 是一种设计思想,将对象的创建和维护权交给外部容器,以...

    gradle-springmvc

    1. **项目初始化**:使用 Gradle 初始化项目结构,配置 build.gradle 文件,定义项目的依赖项,如 spring-webmvc、spring-context 等。 2. **配置 Spring MVC**:创建 Spring 配置文件,定义 DispatcherServlet、...

    spring mvc

    - 初始化上下文定义(如文件上传解析器、国际化资源文件等)。 - 接收并响应客户端请求。 2. **HandlerMapping**:负责根据请求找到合适的控制器(Handler)。 - 常见的有 `BeanNameUrlHandlerMapping`、`...

    Spring in Action(第二版 中文高清版).part2

    2.5.3 初始化和销毁Bean 2.6 小结 第3章 高级Bean装配 3.1 声明父Bean和子Bean 3.1.1 抽象基Bean类型 3.1.2 抽象共同属性 3.2 方法注入 3.2.1 基本的方法替换 3.2.2 获取器注入 3.3 注入非Spring Bean ...

    spring 3.2 reference

    2.2 Bean的生命周期:从实例化、初始化、使用到销毁,Spring提供了对Bean完整生命周期的管理,包括单例或多例模式、初始化回调、销毁回调等。 2.3 Bean的作用域:Bean可以具有Singleton(单例)、Prototype(原型)...

    springmvc demo讲解

    `DispatcherServlet` 初始化时,会创建一个与Servlet相关的WebApplicationContext,这个上下文继承自根上下文,并且可以通过`init-param`中的`contextConfigLocation`参数指定其配置文件,通常是"classpath:spring/...

    Java面试宝典2018

    - 加载、验证、准备、解析和初始化的过程。 - 双亲委派模型的工作原理及其优点。 - 类加载器的种类及其作用。 - **常见面试题**: - 自定义类加载器的方法? - 类加载过程中可能发生哪些错误? - **3.2 对象...

    Spring in Action(第二版 中文高清版).part1

    2.5.3 初始化和销毁Bean 2.6 小结 第3章 高级Bean装配 3.1 声明父Bean和子Bean 3.1.1 抽象基Bean类型 3.1.2 抽象共同属性 3.2 方法注入 3.2.1 基本的方法替换 3.2.2 获取器注入 3.3 注入非Spring Bean ...

    SpringMVC 处置流程分析

    然后,调用 wac.refresh()来初始化上下文,这个过程包括解析配置文件、创建Bean定义、实例化Bean、依赖注入等。 2. DispatcherServlet 的初始化DispatcherServlet 是 SpringMVC 的核心组件,它负责处理HTTP请求。每...

    springmvc.pdf

    - 初始化上下文(ApplicationContext),加载配置文件。 - 解析用户请求,找到合适的 Handler。 - 调用 HandlerAdapter 进行预处理。 - 调用 ViewResolver 解析视图。 #### 五、Controller 接口控制器详解 1. **...

    springmvc开发文档

    - **启动过程**:通过 Servlet 容器初始化 DispatcherServlet,加载配置文件,并创建 IoC 容器。 #### 四、DispatcherServlet 详解 - **作用**:是 SpringMVC 的核心控制器,用于处理 HTTP 请求。 - **工作流程**:...

Global site tag (gtag.js) - Google Analytics