8 -- 深入使用Spring -- 7...1 启动Spring 容器

      8.7.1 启动Spring容器

        对于使用Spring的Web应用,无须手动创建Spring容器,而是通过配置文件声明式地创建Spring容器。因此,在Web应用中创建Spring容器有如下两种方式:

          ⊙ 直接在web.xml文件中配置创建Spring容器

          ⊙ 利用第三方MVC框架的扩展点,创建Spring容器。

        其实第一种创建Spring容器的方式更加常见。为了让Spring容器随Web应用的启动而自动启动,借助于ServletContextListener监听器即可完成,该监听器可以在Web应用启动时回调自定义方法------该方法就可以启动Spring容器。

        Spring 提供了一个ContextLoaderListener,该监听器类实现了ServletContextListener接口。该类可以作为Listener使用,它会在创建时自动查找WEB-INF/下的applicationContext.xml文件。因此,如果只有一个配置文件,并且文件名为applicationContext.xml,则只需在web.xml文件中增加如下配置片段即可。

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

        如果有多个配置文件需要载入,则考虑使用<context-param.../>元素来确定配置文件的文件名。ContextLoaderListener加载时,会查找名为contextConfigLocation的初始化参数。因此,配置<context-param.../>时应指定参数名为contextConfigLoaction。

        XML : 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    
    <!-- 指定多个配置文件 -->
    <context-param>
        <!-- 参数名为contextConfigLoaction -->
        <param-name>contextConfigLoaction</param-name>
        <!-- 多个配置文件之间以","隔开 -->
        <param-value>/WEB-INF/daoContext.xml,/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    
    <!-- 使用ContextLoaderListener初始化Spring容器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
</web-app>

        如果没有使用contextConfigLocation指定配置文件,则Spring自动查找/WEB-INF/路径下的applicationContext.xml配置文件;如果有contextConfigLocation,则使用该参数确定的配置文件。如果无法找到合适的配置文件,Spring无法正常初始化。

        Spring根据指定的配置文件创建WebApplicationContext对象,并将其保存在Web应用的ServletContext中。在大部分情况下,应用中的Bean无须感受到ApplicationContext的存在,只要利用ApplicationContext的IoC即可。

        如果需要在应用中获取ApplicationContext实例,则可以通过如下代码获取。

WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(getServletContext());

        当然,也可以通过ServletContext的getAttribute方法获取ApplicationContext。但使用WebApplicationContextUtils类更方便,因为这样无须记住Applicationtext在ServletContext中的属性名(属性名为WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)。使用WebApplicationContextUtils还有一个额外的好处:如果ServletCotext的WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE属性没有相应的对象,WebApplication-ContextUtils的getWebApplicationContext()方法将会返回空,而不会引起异常。

        还有一种情况,即利用第三方MVC框架的扩展点来创建Spring容器,比如Struts 1,但这种情况通常只对特定框架才有效。

啦啦啦

啦啦啦

啦啦啦

原文地址:https://www.cnblogs.com/ClassNotFoundException/p/6641821.html