Web加载Spring的过程

本文详细解析了如何在Web应用中集成Spring框架,重点阐述了Spring容器是如何在Web容器中自动加载和初始化的过程,包括使用web.xml配置监听器、获取web.xml中的初始化参数、以及Spring容器的加载流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在WEB应用中集成Spring的非常简单:只需要在web.xml中配置
<listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
那么,Spring容器会自动启动,那么Spring是怎样一步步加载到web容器中呢?
    众所周知,web容器会自动加载web.xml中的listener、filter、servlet。所有Listener都实现了J2EE规范的接口:ServletContextListener,实现接口中两个方法:

  public abstract void contextInitialized(javax.servlet.ServletContextEvent arg0);
  public abstract void contextDestroyed(javax.servlet.ServletContextEvent arg0);

    当Web容器启动的时候,容器会自动实例化Spring的监听实现类ContextLoaderListener,并调用contextInitialized接口。当web容器退出的时候,web容器会自动调用contextDestroyed接口,销毁监听器对象。那么,Spring的监听器类ContextLoaderListener在初始化的时候是怎样一步步加载的?
    分析代码,我们看到

    public void contextInitialized(ServletContextEvent event) {
        this.contextLoader = createContextLoader();
        this.contextLoader.initWebApplicationContext(event.getServletContext());
    }

 

createContextLoader函数只做了一件事情:

    protected ContextLoader createContextLoader() {
        return new ContextLoader();
    }

真正的初始化过程是调用ContextLoader类的initWebApplicationContext方法,即初始化Spring的WebApplicationContext容器。ContextLoader.initWebApplicationContext(ServletContext servletContext)需要一个ServletContext对象,就是web容器的上下文对象servletContext,在web容器中它只有一份。对象中包含了web.xml配置的初始化参数,例如,我们可以杂web.xml中配置如下内容,告诉Spring容器要加载的xml文件的位置。

    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:log4j.xml</param-value>
    </context-param>

那么在程序中,只要可以获取到ServletContext对象的实例,就可以通过servletContext.getAttribute(param-name)轻松地获取到param-value的值。

    进入initWebApplicationContext函数后,Spring首先从ServletContext中获取一个key为org.springframework.web.context.WebApplicationContext.ROOT的值,如果不为空,说明在ServletContext中已经存在一份根application,则抛出异常。首先

在Java Web项目中加载Spring配置信息通常涉及到以下几个步骤: 1. **包含Spring核心库**:首先,在项目的Web.xml文件中,你需要包含Spring的Servlet或Filter,例如 `<servlet>` 或 `<filter-mapping>` 标签来引用Spring的`DispatcherServlet`。 ```xml <!-- 如果使用Spring Boot --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <!-- 或者如果使用传统Spring框架 --> <servlet> <servlet-name>springServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>configLocation</param-name> <param-value>/WEB-INF/spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> ``` 2. **创建Spring上下文**:在`DispatcherServlet`初始化时,它会读取配置文件,并创建一个Spring应用上下文。这是通过`<context-param>`标签的`contextConfigLocation`属性指定的XML文件,例如`applicationContext.xml`。 3. **注入bean**:Spring应用上下文中定义的bean会在请求处理之前自动装配到相应的Controller、Service、Repository等类中。你可以通过@Autowired注解或其他依赖注入方式来接收这些bean。 4. **错误处理**:在处理`DispatcherServlet`时,可以配置错误处理器(ErrorHandler)来提供统一的错误反馈,这也可以从Spring配置中获取。 在实际项目中,如果你使用Spring Boot,配置会更加简洁,因为它的自动配置机制能自动扫描资源目录下的配置文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值