Spring学习一

Spring 基础学习一

spring在J2EE中应用最多的属于WebApplicationContext类,此类是spring IOC容器ApplicaionContext的子类,专门为web应用准备,它允许从相对于web根目录的路径中装载配置文件完成初始化工作。从WebApplicationContext中可以获得ServletContext的引用,而且WebApplicationContext对象也将作为属性放到ServletContext中,可以使用WebApplicationContextUtil的getWebApplicationContext(ServletContex sc)方法获得WebApplicationContext的实例。

WebApplicationContext wac=(WebApplicationContext)servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

此方法可以从ServletContext属性中通过,WebApplicationContext类定义的常量ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE来获得相应的实例,此方法也是WebApplicationContextUtil获得Web应用上下文实例的内部实现方法。

WebApplicationContext初始化

WebApplicationContext的初始化需要ServletContext的引用,所以必须在拥有Web容器的前提下才能完成启动工作。

因此可以通过定义自启动Servlet或者定义Web容器监听器来,完成WebApplicationContext的初始化工作。

Spring提供了ContextLoaderServlet或者ContextLoaderListener来辅助WebApplicationContext的初始化,这两类中都实现了启动WebApplicationContext实例的逻辑,我们只需要在Web.xml中配置就可以了。

<!--指定配置文件-->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/baobaotao-dao.xml,/WEB-INF/baobaotao-service.xml
    </param-value>
</context-param>

<!--声明Web容器监听器-->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

ContextLoaderListener通过Web容器上下文参数contextConfigLocation获取Spring配置文件位置,可以指定多个配置文件,用逗号,空格,或冒号分开均可,对于未带资源类型前缀的配置文件路径,会默认这些路径相对于Web应用部署的根路径,对于配置了资源类型前缀的路径,和上面是等效的,例如 classpath*:/baobaotao-*.xml

通过自启动servlet来引导
<!--指定配置文件-->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/baobaotao-dao.xml,/WEB-INF/baobaotao-service.xml
    </param-value>
</context-param>

<!--声明自启动Servlet-->
<servlet>
    <servlet-name>springContextLoaderServlet</listener-class>
    <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>