- 浏览: 50440 次
- 性别:
- 来自: 南京
文章分类
最新评论
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);
<listener/>与<servlet/>是并行执行吗?还是listener执行完加载servlet
ApplicationObjectSupport#setApplicationContext
由于ApplicationObjectSupport实现了ApplicationContextAware,初始化SimpleUrlHandlerMapping时,会调用setApplicationContext
ApplicationObjectSupport#initApplicationContext
SimpleUrlHandlerMapping#initApplicationContext
AbstractHandlerMapping#initApplicationContext
AbstractHandlerMapping#detectMappedInterceptors
AbstractHandlerMapping#detectMappedInterceptors
参考:
拦截器:
http://www.cnblogs.com/fangjian0423/p/springMVC-interceptor.html
https://my.oschina.net/alextong/blog/97310
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疑难解惑-循环依赖的解决
2020-06-17 23:27 542AbstractAutowireCapableBeanFact ... -
spring容器
2019-07-14 08:47 305private final ServletContainer ... -
spring容器
2019-07-13 23:35 0spring容器与springmvc容器 73 ... -
spring源码学习系列2.6-spring ioc原理-codes
2019-03-05 22:56 488web.xml <listener> < ... -
spring源码学习系列3.4-spring mvc原理-codes
2019-01-21 22:46 297本篇章从核心类角度解读springmvc的原理 web.xm ... -
spring源码学习系列4.2-spring aop原理-codes
2018-12-04 22:29 562jdk: Proxy InvocationHandler ... -
spring源码学习系列4.1-spring实现对ibatis的事务管理
2018-09-17 15:44 579事务由spring管理,可以理解为由spring管理数据库连接 ... -
spring源码学习系列4-3种常用的自动代理创建器
2018-09-02 15:48 5713种自动代理器是 AnnotationAwareAspectJ ... -
spring源码学习系列1.2-spring事务代理深入分析2
2018-05-27 19:46 452提示: BeanPostProcessor AopUtils ... -
spring源码学习系列2.5-ApplicationContext初始化-设计模式
2018-05-08 15:17 520ApplicationContext容器的初始化可以通过模板方 ... -
spring源码学习系列3.3-DispatcherServlet初始化-设计模式
2018-05-07 11:12 623springmvc的核心是DispatcherServlet ... -
封装spring-security
2018-01-23 19:33 519github地址: https://github.com/ne ... -
eclipse导入spring源码
2018-05-12 07:20 981spring在git上的项目时gradle管理jar包的,所以 ... -
spring源码学习系列3.2.3-异常页面拦截机制
2017-07-29 19:07 768前序:本文的意义在于了解 tomcat处理异常 请求访问 ... -
spring源码学习系列3.2.2-How to bind String to Date
2017-07-17 12:40 599springmvc开发中,经常需将界面日期数据(String) ... -
spring源码学习系列3.2.1-command对象的绑定
2017-05-28 12:00 982在<spring源码学习系列3.2-handlerAda ... -
spring源码学习系列3.2-handlerAdapter执行
2017-05-28 12:01 410DispatcherServlet#doDispatch中调用 ... -
spring源码学习系列2.4-finishRefresh会做什么
2017-05-06 16:36 578spring容器初始化完成后,调用finishRresh 该 ... -
spring源码学习系列3-springmvc原理
2017-05-28 11:56 458问题: springmvc是如何控 ... -
spring源码学习系列2-容器初始化入口-refresh
2017-04-23 21:33 477context=XmlWebApplicationContex ...
相关推荐
- `DispatcherServlet`初始化时会创建并配置一系列的`HandlerMapping`、`HandlerAdapter`和`ViewResolver`等组件。 - **3.1.3 根共享环境的加载** - 在`DispatcherServlet`初始化过程中,会加载一个或多个配置文件...
核心 jar 包可能包括 spring-webmvc,它包含了 DispatcherServlet、HandlerMapping、Controller 等关键组件。 - DispatcherServlet 是整个流程的入口,它负责接收请求,分发到相应的处理器。 3. **Web 相关支持**...
它负责初始化HandlerMapping、ViewResolver等组件,并在每次HTTP请求到达时,通过这些组件来处理请求。 ##### 3.2 HandlerMapping HandlerMapping接口定义了如何将一个请求映射到具体的处理器(Handler)。Spring ...
- **初始化**: 初始化时可以设置属性或执行预处理任务。 - **请求处理**: 处理用户请求。 - **清理**: 清理资源或执行后处理任务。 **5.4 错误处理** - **异常处理**: 使用@ControllerAdvice注解的类处理异常。 - ...
- **4.1.3 根共享环境的加载**:这里涉及到Spring的初始化过程,包括ApplicationContext的创建和配置信息的加载。 - **4.1.4 其他Servlet**:除了DispatcherServlet之外,Spring Web MVC还支持其他类型的Servlet。 ...
- 初始化策略接口:初始化如视图解析器(ViewResolver)、处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)等。 - 请求分发:将请求转发到合适的处理器(Controller)。 #### 2.2 HandlerMapping ...
默认情况下,`DispatcherServlet`会加载`/WEB-INF/<servletName>-servlet.xml`的配置文件来初始化Spring容器。我们可以自定义配置文件的位置和名称。 ```xml <web-app xmlns:xsi=...
本书旨在为读者提供一个全面、深入的Spring框架学习资源,特别是针对其在Java 2EE平台上的应用。 ### 一、Spring框架概述 #### 1.1 Spring框架简介 Spring框架是由Rod Johnson创建的一个开源框架,它最初是为了...
SQL文件可能包含数据库的初始化脚本,用于创建Spring MVC应用可能需要的数据表和示例数据。这有助于快速设置数据库环境,进行测试或演示。 总的来说,这个实例提供了一个完整的Spring MVC开发环境,包括了框架的...
可以通过 init-method 和 destroy-method 属性指定 Bean 初始化和销毁时执行的方法。 三、Spring 框架 IoC 特性 3.1 IoC(Inversion of Control)概念 IoC 是一种设计思想,将对象的创建和维护权交给外部容器,以...
1. **项目初始化**:使用 Gradle 初始化项目结构,配置 build.gradle 文件,定义项目的依赖项,如 spring-webmvc、spring-context 等。 2. **配置 Spring MVC**:创建 Spring 配置文件,定义 DispatcherServlet、...
- 初始化上下文定义(如文件上传解析器、国际化资源文件等)。 - 接收并响应客户端请求。 2. **HandlerMapping**:负责根据请求找到合适的控制器(Handler)。 - 常见的有 `BeanNameUrlHandlerMapping`、`...
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 ...
2.2 Bean的生命周期:从实例化、初始化、使用到销毁,Spring提供了对Bean完整生命周期的管理,包括单例或多例模式、初始化回调、销毁回调等。 2.3 Bean的作用域:Bean可以具有Singleton(单例)、Prototype(原型)...
`DispatcherServlet` 初始化时,会创建一个与Servlet相关的WebApplicationContext,这个上下文继承自根上下文,并且可以通过`init-param`中的`contextConfigLocation`参数指定其配置文件,通常是"classpath:spring/...
- 加载、验证、准备、解析和初始化的过程。 - 双亲委派模型的工作原理及其优点。 - 类加载器的种类及其作用。 - **常见面试题**: - 自定义类加载器的方法? - 类加载过程中可能发生哪些错误? - **3.2 对象...
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 ...
然后,调用 wac.refresh()来初始化上下文,这个过程包括解析配置文件、创建Bean定义、实例化Bean、依赖注入等。 2. DispatcherServlet 的初始化DispatcherServlet 是 SpringMVC 的核心组件,它负责处理HTTP请求。每...
- 初始化上下文(ApplicationContext),加载配置文件。 - 解析用户请求,找到合适的 Handler。 - 调用 HandlerAdapter 进行预处理。 - 调用 ViewResolver 解析视图。 #### 五、Controller 接口控制器详解 1. **...
- **启动过程**:通过 Servlet 容器初始化 DispatcherServlet,加载配置文件,并创建 IoC 容器。 #### 四、DispatcherServlet 详解 - **作用**:是 SpringMVC 的核心控制器,用于处理 HTTP 请求。 - **工作流程**:...