`
frank1998819
  • 浏览: 764802 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

Spring 加载 spring xml 配置(转)

 
阅读更多
作者:http://liuwei1578.blog.163.com/blog/static/495803642007116111923195/


Spring中ApplicationContext加载机制。
       加载器目前有两种选择:ContextLoaderListener和ContextLoaderServlet。
       这两者在功能上完全等同,只是一个是基于Servlet2.3版本中新引入的Listener接口实现,而另一个基于Servlet接口实现。开发中可根据目标Web容器的实际情况进行选择。





配置非常简单,在web.xml中增加:
<listener>
     <listener-class>
          org.springframework.web.context.ContextLoaderListener
     </listener-class>
</listener>
或:
<servlet>
       <servlet-name>context</servlet-name>
       <servlet-class>
          org.springframework.web.context.ContextLoaderServlet
       </servlet-class>
       <load-on-startup>1</load-on-startup>
</servlet>





通过以上配置,Web容器会自动加载/WEB-INF/applicationContext.xml初始化
ApplicationContext实例,如果需要指定配置文件位置,可通过context-param加以指定:
<context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/myApplicationContext.xml</param-value>
</context-param>

配置完成之后,即可通过
WebApplicationContextUtils.getWebApplicationContext方法在Web应用中获取ApplicationContext引用。

如:ApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext();
       LoginAction action=(LoginAction)ctx.getBean("action");





-------------------------------------------------------------------------------------------

spring为ApplicationContext提供有三种实现(举例)

       spring为ApplicationContext提供的3种实现分别为:ClassPathXmlApplicationContext,FileSystemXmlApplicationContext和XmlWebApplicationContext,其中XmlWebApplicationContext是专为Web工程定制的。使用举例如下:
   1. FileSystemXmlApplicationContext
         eg1. ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml"); //加载单个配置文件
         eg2.
                 String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"};
                 ApplicationContext ctx = new FileSystemXmlApplicationContext(locations ); //加载单个配置文件
         eg3.      
      ApplicationContext ctx =new FileSystemXmlApplicationContext("D:/project/bean.xml");//根据具体路径加载文件
  2. ClassPathXmlApplicationContext
         eg1.  ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
         eg2.
                 String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"};
                 ApplicationContext ctx = new ClassPathXmlApplication(locations);
         注:其中FileSystemXmlApplicationContext和ClassPathXmlApplicationContext与BeanFactory的xml文件定位方式一样是基于路径的。
3. XmlWebApplicationContext
     eg1. ServletContext servletContext = request.getSession().getServletContext();   
          ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);



注 : 一般是 ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());



配置初始化


1. 在struts-config.xml里,以插件的形式


xml 代码

1.< plug-in className="org.springframework.web.struts.ContextLoaderPlugIn" / >  
2.    < set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" / >  
3.< / plug-in >   

这种方式如果没有配置contextConfigLocation的值,则会自动加载xx-servlet.xml.

xx的值是和web.xml里的配置org.apache.struts.action.ActionServlet的servlet-name的值一样

如下:xx的值也就是 action,所以会自动加载action-servlet.xml


xml 代码

1.< servlet >  
2.    < servlet-name >action< / servlet-name >  
3.    < servlet-class >org.apache.struts.action.ActionServlet< / servlet-class >  
4.    < load-on-startup >1< / load-on-startup >  
5.  < / servlet >  
6.  < servlet-mapping >  
7.    < servlet-name >action< / servlet-name >  
8.    < url-pattern >*.do< / url-pattern >  
9.  < / servlet-mapping >  

如果sturts-config.xml里配置了contextConfigLocation的值,那么就不会自动加载xx-servlet.xml了,而只会加载contextConfigLocation所指定的xml.

2. 第2种方式

在web.xml里配置Listener


xml 代码

1.<listener>  
2.        <  listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>  
3.    <  /  listener>  



如果在web.xml里给该Listener指定要加载的xml,如:

xml 代码

1.<context-param>  
2.        <param-name>contextConfigLocationparam-name>  
3.        <param-value>classpath*:spring/*.xmlparam-value>  
4.    context-param>  

则会去加载相应的xml,而不会去加载/WEB-INF/下的applicationContext.xml。。但是,如果没有指定的话,默认会去/WEB-INF/下加载applicationContext.xml。



3. 第三种方式:ContextLoaderServlet



xml 代码

1.< servlet>    
2.        < servlet-name>context< / servlet-name>    
3.        < servlet-class>org.springframework.web.context.ContextLoaderServlet< / servlet-class>    
4.        < load-on-startup>1< / load-on-startup>    
5.    < / servlet>  



这种方式和第二种Listener方式一样,唯一的区别就是用Listener方式初始化ApplicationContext,可以和用第一种方式(struts-config.xml里 plugin方式)同时存在,而ContextLoaderServlet则不可以和第一种方式同时存在

总结:

ContextLoaderServlet已经不推荐用了,它只是为了兼容低版本的servlet.jar才用的。

总的来说:Listerner要比Servlet更好一些,而且Listerner监听应用的启动和结束,而Servlet启动要稍微延迟一些。
分享到:
评论

相关推荐

    spring bean XML配置入门

    一旦XML配置加载到Spring容器中,容器将根据配置创建Bean实例,并按照定义进行初始化、依赖注入,最后完成Bean的生命周期管理。 10. **实践操作**: 在实际开发中,我们可以使用Eclipse的Spring插件来简化Bean...

    项目配置文件( spring-mvc.xml spring-mybatis.xml web.xml log4j.properties)

    通过这个配置,Spring可以管理MyBatis的SqlSession,实现数据库操作的事务控制,并且能够自动扫描和加载Mapper接口,使得SQL查询可以通过注解或者XML文件进行定义。 3. **web.xml**: 这是Web应用的部署描述符,定义...

    spring 重新动态加载数据库或xml中的bean,可以不用重启tomcat

    spring 重新动态加载数据库或xml中的bean,可以不用重启tomcat

    31. Spring Boot导入XML配置【从零开始学Spring Boot】

    6. **源码阅读**:理解Spring Boot如何加载和处理XML配置,可以查阅Spring Framework的源码。这有助于我们更好地控制配置的加载顺序和解析逻辑。 通过以上步骤,我们可以在保持Spring Boot简洁性的同时,灵活地引入...

    Spring动态加载配置文件

    通常,我们将Spring的配置文件(如`applicationContext.xml`)放在项目的类路径下,如`src/main/resources`目录。确保配置文件的位置在项目构建后不会变动,以便于后续的监听和加载。 其次,我们需要创建一个监听类...

    模拟spring的xml配置文件注入

    在Spring框架中,XML配置文件是核心组成部分,它定义了bean的实例化、依赖注入以及其他的框架设置。本文将深入探讨如何模拟Spring的XML配置文件注入,并通过SAXBuilder解析XML文件来实现这一过程。 首先,理解XML...

    在Spring Boot中加载XML配置的完整步骤

    本文将详细介绍如何在Spring Boot应用中加载XML配置的完整步骤。 首先,创建一个新的Spring Boot项目,例如命名为`xml`。接着,我们需要添加Web相关的依赖,以确保我们的应用可以处理HTTP请求。这可以通过在`pom....

    加载spring 文件,在web.xml中的配置

    当我们谈论“加载Spring文件,在web.xml中的配置”时,主要是指如何在Web应用启动时初始化Spring IoC(Inversion of Control,控制反转)容器并加载配置文件。 1. **使用ContextLoaderListener** `&lt;listener&gt;`标签...

    Spring中使用classpath加载配置文件浅析

    首先,我们来看一下Spring加载配置文件的基本方式。在Spring中,可以通过ApplicationContext接口的实现类,比如ClassPathXmlApplicationContext,来加载位于classpath中的配置文件。例如,创建一个...

    spring加载多个配置文件

    首先,Spring提供了多种方式来加载多个配置文件,包括XML配置、Java配置以及基于注解的配置。在XML配置中,可以使用`&lt;import&gt;`标签来引入其他XML配置文件。例如,主配置文件中可以这样写: ```xml ...

    Spring XML配置的12个技巧

    Spring XML配置是Spring框架中的一种常见方式,用于定义和管理应用程序中的bean及其依赖关系。以下是对Spring XML配置的12个技巧的详细说明: 1. 避免使用自动装配:Spring提供了自动装配功能,通过匹配bean属性或...

    Spring+mvc+mybatis Mapper xml自动加载

    "Spring+mvc+mybatis Mapper xml自动加载"这个主题聚焦于如何在开发过程中优化配置,使得改动Mapper XML文件后,无需重启Tomcat服务器,就可以立即生效,从而提高开发效率。 Spring MVC是Spring框架的一部分,它...

    详解Spring mvc的web.xml配置说明

    当Web应用程序启动时,Tomcat或Jetty等容器会触发此监听器,进而加载Spring的配置信息,创建ApplicationContext,使得Spring框架能够接管应用程序的生命周期管理。 2. **过滤器(Filter)** 过滤器在HTTP请求和...

    Spring 加载多个配置文件

    ### Spring 加载多个配置文件详解 #### 一、引言 在现代软件开发中,Spring 框架因其强大的依赖注入(DI)和面向切面编程(AOP)能力而备受青睐。尤其在构建大型应用时,为了提高代码的可读性和可维护性,将系统...

    加载jar包中的spring配置文件

    例如,`classpath:spring-context.xml`意味着Spring会尝试在类路径下的`spring-context.xml`文件中加载配置。 3. **`classpath*:`前缀**:这个前缀与`classpath:`类似,但有一个重要的区别。`classpath*:`不仅会...

    Spring中如何加载多个配置文件.pdf

    ### Spring框架中加载多个配置文件的方法 在Spring框架中,加载多个配置文件是常见的需求之一。这不仅可以帮助我们更好地组织代码结构,还可以提高程序的可维护性和可扩展性。本文将详细介绍Spring框架中如何加载多...

    Spring Boot技术知识点:如何读取不同路径里的applicationContext.xml配置文件1

    总之,虽然Spring Boot主要依赖Java配置,但通过合理的使用`@ImportResource`和理解配置加载机制,我们可以灵活地在项目中融入XML配置文件,实现与Spring Boot的无缝集成。这使得我们能够在享受Spring Boot带来的...

    如何加载jar包中的spring配置文件

    在Spring MVC项目中,加载jar包中的Spring配置文件是一个常见的需求,特别是在进行SSM(Spring、Spring MVC、MyBatis)整合时。SSM框架的整合通常涉及到多个配置文件的组织和管理,其中一部分配置可能会被打包到独立...

    Test05_Spring_Context_XML.rar

    最后,Spring提供了多种方式来加载Context XML配置,包括使用`ClassPathXmlApplicationContext`或`FileSystemXmlApplicationContext`等。这些应用上下文类负责读取配置文件,解析bean定义,并创建bean实例。 总结...

Global site tag (gtag.js) - Google Analytics