欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC启动流程——IOC容器创建

程序员文章站 2022-07-12 13:09:05
...

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

SpringMVC启动流程——IOC容器创建

调用父类方法

SpringMVC启动流程——IOC容器创建

容器不存在就创建并配置生成WebApplicationContext实例。,若存在则抛出异常

SpringMVC启动流程——IOC容器创建

创建 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方法

SpringMVC启动流程——IOC容器创建

主要调用了initServletBean 方法

3.2 FrameworkServlet的initServletBean方法

SpringMVC启动流程——IOC容器创建

主要调用了initWebApplicationContext()方法,创建spring mvc IOC

3.3 FrameworkServlet的initWebApplicationContext()方法

SpringMVC启动流程——IOC容器创建

3、initWebApplicationContext()方法会创建一个当前servlet的一个IoC子容器。

相关标签: spring