`

Spring中ApplicationContext加载机制

阅读更多
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp33

加载器目前有两种选择: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>classpath:applicationContext-bean.xml,classpath:spring-jamon.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");//根据具体路径加载文件
注:
(1)这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。
(2)获取失败时抛出异常。
  2. ClassPathXmlApplicationContext
      eg1.ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
      eg2.String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"};
           ApplicationContext ctx = new ClassPathXmlApplication(locations);
注:
(1).其中FileSystemXmlApplicationContext和ClassPathXmlApplicationContext与BeanFactory的xml文件定位方式一      样是基于路径的。

3. XmlWebApplicationContext
    eg1.ServletContext servletContext = request.getSession().getServletContext();   
            ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
注 :
(1)一般是 ApplicationContext ctx =
WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
(2)获取失败时返回null。
(3)这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。
4.继承自抽象类ApplicationObjectSupport
说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。
Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。
5.继承自抽象类WebApplicationObjectSupport
说明:类似上面方法,调用getWebApplicationContext()获取WebApplicationContext
6.实现接口ApplicationContextAware
说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。
Spring初始化时,会通过该方法将ApplicationContext对象注入。
实现方法:
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
        applicationContext = arg0;   
    }
获取bean:
ITaskService bean = (ITaskService)applicationContext.getBean(taskServiceName);

参考:
1 http://hi.baidu.com/fyears/blog/item/e2f689afd05216ce7dd92a37.html
2. http://www.blogjava.net/Todd/archive/2010/04/22/295112.html

分享到:
评论

相关推荐

    Spring中ApplicationContext和beanfactory区别.rar

    3. **事件支持**:ApplicationContext提供了ApplicationEvent和ApplicationListener机制,允许在应用程序上下文中发布和监听事件。 4. **AOP代理**:ApplicationContext能够自动创建AOP代理,使得我们可以方便地...

    三、Spring源码分析——ApplicationContext

    ApplicationContext还支持Bean的懒加载、单例或多例管理、Profile功能(根据环境选择加载不同的配置)、以及与其他Spring模块(如Spring Data、Spring Security等)的集成。 总的来说,ApplicationContext作为...

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

    在Spring框架中,classpath加载配置文件是应用开发中常见的操作。Spring框架提供了灵活的方式来...随着技术的发展,Spring也在不断地改进其配置加载机制,了解最新的加载方式可以帮助开发者更有效地利用Spring框架。

    Spring动态加载配置文件

    在Spring框架中,动态加载配置文件是一项重要的功能,它使得开发者在开发过程中无需重启应用就能实时更新配置,极大地提高了开发效率。热部署方案是这一功能的具体应用,它允许我们在不中断服务的情况下,对应用程序...

    Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)

    在Spring框架中,Bean的生命周期管理和ApplicationContext的应用是两个核心概念,它们对于理解Spring如何管理和协调应用中的对象至关重要。本文将深入探讨这两个主题,并结合国际化(i18n)和事件传递来阐述它们在...

    day38 05-Spring的BeanFactory与ApplicationContext区别

    在Spring框架中,BeanFactory和ApplicationContext是两种不同的bean容器,它们各自有其特性和应用场景,理解二者的区别对于深入掌握Spring框架至关重要。 首先,BeanFactory是Spring中最基本的bean容器,它提供了对...

    spring加载

    《Spring框架加载机制详解》 在Java开发领域,Spring框架以其强大的依赖注入和面向切面编程功能,成为了企业级应用的首选。本文将深入探讨Spring框架的加载过程,旨在帮助开发者更好地理解和掌握Spring的核心机制。...

    09 Spring IoC容器ApplicationContext如何实现国际化慕课专栏1

    理解这些基本概念和机制后,我们可以灵活地在Spring应用中实现国际化,为全球用户提供更加友好和本地化的体验。在Spring MVC中,国际化同样可以应用,通过配置视图解析器和HTTP请求中的locale信息,可以实现动态切换...

    struts加载spring的方法

    2. **配置Spring监听器**:在`web.xml`文件中,需要配置一个Spring的上下文监听器`ContextLoaderListener`,该监听器负责初始化Spring的ApplicationContext。具体配置如下所示: ```xml &lt;listener-class&gt;org....

    SpringCloud中文文档

    Spring Cloud Context 提供了 ApplicationContext 的实用程序和特殊服务,而 Spring Cloud Commons 则是一组在不同的 Spring Cloud 实现中使用的抽象和常用类。 在使用 Spring Cloud 时,需要注意到由于“非法密钥...

    在非spring注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息

    虽然通常这个注解用于Spring管理的Bean,但也可以在非Spring管理的类中使用,只要确保配置的加载和绑定过程正确执行。 为了读取YAML配置,你需要在Spring Boot应用的启动类或者其他适当的初始化点,注册`@...

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

    在Spring Boot应用中,我们通常使用YAML或properties文件来管理我们的配置,因为它们与Spring Boot的自动配置机制紧密集成。然而,在某些情况下,我们可能需要读取传统的`applicationContext.xml`配置文件,例如,当...

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

    加载jar包中的Spring配置文件需要对Spring的类路径加载机制有深入理解。通过`ClassPathResource`,我们可以定位并加载jar包内的配置,然后应用到`ApplicationContext`。在SSM整合的项目中,正确地加载这些配置文件...

    Spring5中文文档

    它介绍了Spring的ApplicationContext和BeanFactory等核心组件,以及如何通过注解和Java配置文件来配置bean。还涉及了Spring IoC容器的扩展功能,例如资源加载、环境抽象和加载时编织器的注册。 资源管理章节涵盖了...

    xfire+Spring整合

    3. **XFire的Spring支持**:XFire提供了对Spring的内置支持,可以通过Spring的ApplicationContext加载Web服务。在Spring配置文件中,我们可以定义一个`&lt;bean&gt;`,指定其类型为`org.codehaus.xfire.spring....

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

    此外,`@Component`注解使这个类成为了一个Spring Bean,`ApplicationContextAware`接口则允许我们获取并设置`ApplicationContext`,从而能够在`loadXmlConfigurations`方法中加载XML配置。 在实际开发中,你还需要...

    Spring 加载多个配置文件

    Spring 提供了多种机制来加载和管理多个配置文件,确保应用程序能够灵活地组织和维护其配置细节。 ##### 3.1 ApplicationContext 加载多个配置文件 `ApplicationContext` 是 Spring 的核心接口之一,用于提供Bean...

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

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

Global site tag (gtag.js) - Google Analytics