SpringMVC启动流程——IOC容器创建
SpringMVC启动流程——IOC容器创建
1. 简介
Spring中一般除了web容器有两个容器:Spring容器和Spring MVC容器
Spring容器是管理service和dao的。
SpringMVC容器是管理controller对象的。
Spring容器和SpringMVC容器的关系是父子容器的关系。Spring容器是父容器,SpringMVC容器是子容器。在子容器里可以访问父容器里的对象,但是在父容器里不可以访问子容器的对象,说的通俗点就是,在controller里可以访问service对象,但是在service里不可以访问controller对象。所以这么看的话,所有的bean,都是被Spring或者SpringMVC容器管理的,他们可以直接注入。然后SpringMVC的拦截器也是SpringMVC容器管理的,所以在SpringMVC的拦截器里,可以直接注入bean对象。
2. spring容器的创建
Spring Context是在ContextLoaderListener中配置的,ContextLoaderListener读取context-param中的contextConfigLocation指定的配置文件,创建Spring Context。
2.1 ContextLoaderListener配置
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:app-context.xml</param-value>
</context-param>
Spring 在web容器中通常是通过在web.xml文件中配置切入点来进行相关初始化的。
2.2 ContextLoaderListener创建Spring IOC
调用父类方法
容器不存在就创建并配置生成WebApplicationContext实例。,若存在则抛出异常
创建 Spring IOC 容器
3. spring mvc容器的创建
Spring MVC中核心的类是DispatcherServlet,在这个类中完成Spring mvc context的加载与创建,并且能够根据Spring Context的内容将请求分发给各个Controller类。DispatcherServlet继承自HttpServlet,关于Spring Context的配置文件加载和创建是在init()方法中进行的,主要的调用顺序是init–>initServletBean–>initWebApplicationContext
3.1 HttpServletBean的init方法
主要调用了initServletBean 方法
3.2 FrameworkServlet的initServletBean方法
主要调用了initWebApplicationContext()方法,创建spring mvc IOC
3.3 FrameworkServlet的initWebApplicationContext()方法
3、initWebApplicationContext()方法会创建一个当前servlet的一个IoC子容器。
上一篇: JAVA之面向对象
下一篇: Python第二节(基础语法)
推荐阅读