applicationcontext

实用的Bean工厂ApplicationContext

ApplicationContext的中文意思是"应用前后关系",它继承自BeanFactory接口,除了包含BeanFactory的所有功能之外,在国际化支持、资源访问(如URL和文件)、事件传播等方面进行了良好的支持,被推荐为Java EE应用之首选,可应用在Java APP与Java Web中。

ApplicationContext接口的常用实现类介绍

1. ClassPathXmlApplicationContext

  从类路径ClassPath中寻找指定的XML配置文件,找到并装载

  完成ApplicationContext的实例化工作。例如:

  //装载单个配置文件实例化ApplicationContext容器

  ApplicationContext cxt = new ClassPathXmlApplicationContext

  ("applicationContext.xml");

  //装载多个配置文件实例化ApplicationContext容器

  String[] configs = {"bean1.xml","bean2.xml","bean3.xml"};

  ApplicationContext cxt = new ClassPathXmlApplicationContext(configs);

2. FileSystemXmlApplicationContext

  从指定的文件系统路径中寻找指定的XML配置文件,找到并装载

  完成ApplicationContext的实例化工作。例如:

  //装载单个配置文件实例化ApplicationContext容器

  ApplicationContext cxt = new FileSystemXMLApplicationContext("beans.xml");

  //装载多个配置文件实例化ApplicationContext容器

  String[] configs = {"c:/beans1.xml","c:/beans2.xml"};

  ApplicationContext cxt = new FileSystemXmlApplicationContext(configs);

3.XmlWebApplicationContext

  从Web应用中的寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。这是为Web工程量身定制的,使用WebApplicationContextUtils类的                getRequiredWebApplicationContext方法可在JSP与Servlet中取得IoC容器的引用

这些实现类的主要区别就是装载Spring配置文件实例化ApplicationContext容器的方式不同,在ApplicationContext实例化后,同样通过getBean方法从ApplicationContext容器中获取装配好的Bean实例以供使用。

与BeanFactory不同的是,ApplicationContext容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使之处于待用状态。而BeanFactory容器实例化后并不会自动实例化Bean,只有当Bean被使用时BeanFactory容器才会对该Bean进行实例化与依赖关系的装配。

在Java项目中通过ClassPathXmlApplicationContext类手动实例化ApplicationContext容器通常是不二之选。但对于Web项目就不行了,Web项目的启动是由相应的Web服务器负责的,因此,在Web项目中ApplicationContext容器的实例化工作最好交给Web服务器来完成。

Spring为此提供了两种解决方案,一种是基于ContextLoaderListener实现的(此方案只适用于Servlet2.4及以上规范的Servlet容器)。例如,在web.xml中加入如下代码:

<!-- 指定Spring的配置文件,多个配置文件以逗号分隔 -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring-config/applicationContext.xml</param-value>

</context-param>

<!-- 指定以Listener方式启动Spring容器 -->

<listener>

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

</listener>

另外一种方案则是基于ContextLoaderServlet实现的。例如,在web.xml中加入如下代码:

<!-- 指定Spring的配置文件,多个配置文件以逗号分隔 -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring-config/applicationContext.xml</param-value>

</context-param>

<!-- 指定以Servlet方式启动Spring容器 -->

<servlet>

<servlet-name>context</servlet-name>

<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

从servlet容器启动时加载组件的顺序来看,Listener组件是优先于Servlet组件的。基于Servlet方式的加载方案主要是为了兼容Servlet2.3及以下规范的Servlet容器。以Tomcat为例,Tomcat 5.x都已经支持Servlet2.4规范了,因此,基于Listener方式启动Spring容器是目前的主流选择。

ApplicationContext.xml配置文件

Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的"图纸"。Java EE程序员必须学会并灵活应用这份"图纸"准确地表达自己的"生产意图"。Spring配置文件是一个或多个标准的XML文档,ApplicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。

时间: 2024-08-14 06:00:13

applicationcontext的相关文章

Beanfactory与ApplicationContext

Spring提供了容器实现的两种方式: Bean工厂(BeanFactory接口),提供了基础的依赖注入支持: 应用上下文(ApplicationContext接口),建立在Bean工厂基础之上,提供了系统架构服务. 现阶段,企业开发在选择上更加倾向于ApplicationContext接口,因为ApplicationContext接口涵盖了BeanFactory接口,如果使用一个普通的BeanFactory接口,很多其他的功能将不会起作用,如Spring的事物transcation和AOP都不

java.lang.IllegalStateException: Failed to load ApplicationContext

1.错误描述 INFO:2015-02-05 22:14:21[main] - Loading XML bean definitions from class path resource [applicationContext.xml] INFO:2015-02-05 22:14:22[main] - JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning INFO:2015-02-05

web.xml 配置applicationContext.xml

web.xml中classpath:和classpath*:  有什么区别? classpath:只会到你的class路径中查找找文件; classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找. 有时候会用模糊匹配的方式配置多配置文件. 但是如果配置文件是在jar包里,模糊匹配就找不到了.可以用逗号隔开的方式配置多个配置文件. 如: <listener>  <listener-class>org.springframework.web.conte

Spring源码解析-applicationContext

Demo uml类图 ApplicationContext ApplicationListener 源码解析 主流程 obtainFreshBeanFactory prepareBeanFactory invokeBeanFactoryPostProcessors registerBeanPostProcessors registerListeners finishRefresh 总结 在已经有BeanFactory可以完成Ioc功能情况下,spring又提供了ApplicationContex

applicationContext.xml简单笔记

applicationContext.xml简单笔记 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://

SpringMVC之application-context.xml,了解数据库相关配置

上一篇SpringMVC之web.xml让我们了解到配置一个web项目的时候,如何做基础的DispatcherServlet相关配置,作为SpringMVC上手的第一步,而application-context.xml则让我们了解到如何将数据库信息加载到项目中,包含关键的数据库连接信息.sqlSessionFactory.事务等关键因素. ①.xml内容 <?xml version="1.0" encoding="UTF-8"?> <beans x

Spring简单获得实体类的实例, 使用ApplicationContext()方法的几点注意事项

今天接触了Spring的初步用法, 感觉跟实例化实体类没啥区别, 像这种简单的代码还不如直接实例化来的方便, 这样使用Spring的话总共需要三个文件 第一个当然是一个实体类了, 定义好属性, getter和setter方法, 别忘了构造一个无参的构造方法. public class HelloWorld { private String mingzi; private String dizhi; private User user; public void sayHello() { Syste

spring的applicationContext.xml如何自动加载

一个web工程自动加载的配置文件只有web.xml,想要加载其他.xml必须在web.xml里面进行配置. 用spring的时候需要一个bean容器来管理所有的bean,所有bean默认是写在applicationContext.xml里的,在web.xml里面是这么设置的, 1 <context-param> 2 <param-name>contextConfigLocation</param-name> 3 <param-value> 4 /WEB-IN

使用ApplicationContext作为全局变量引用的缺陷

在上一篇博客中,我讲了初次开发安卓必须知道的 6件事(6 THINGS I WISH I KNEW BEFORE I WROTE MY FIRST ANDROID APP).其中一条就是:不要有一个Context的静态引用.我这么警告的原因是一个Context的静态引用可能引发内存泄露.但是一位读者指出:一个Application Context的静态引用不会造成内存泄露,因为只要程序还在运行,Application Context的生命周期就不会结束.我则反驳到:技术上来说,你可以拥有一个Ap

Web环境下applicationContext.xml文件配置

在web环境下(web.xml)如何配置applicationContext.xml文件 <listener>  <listener-class>   org.springframework.web.context.ContextLoaderListener  </listener-class> </listener> 或: <servlet>  <servlet-name>context</servlet-name>