容器
是Spring框架的核心,是组件存活的地方。Spring容器使用DI管理所有组成应用系统的组件,协作组件之间建立联。而且,
这些对象简洁易懂,降低耦合性,支持重用,容易被测试。
Spring提供了多种容器实现,可分为两类:Bean工厂
和应用上下文
。
1.
BeanFactory
:由org.springframework.beans.factory.BeanFactory接口定义,是最简单的容器,提供了基础的依赖注入支持。
BeanFactory采用了工厂设计模式,负责创建和分发各种类型的Bean,创建协作对象间的关联关系,管理Bean的生命周期,调用
用户定义的初始化和销毁方法(如果定义了这些方法的话)等。
BeanFactory有多种实现,其中,最常用的是XMLBeanFactory,它根据XML文件中的定义装载Bean。在创建XMLBeanFactory
时,需要传递一个org.springframework.core.io.Resource的实例给构造器,此Resource实例用来提供XML文件给BeanFactory。
Spring提供了以下多种Resource的实现:
Resource实现
|
描述
|
1. org.springframework.core.io.ByteArrayResource |
定义内容由一组字节给定的资源 |
2. org.springframework.core.io.ClassPathResource |
定义可从classpath提起的资源 |
3. org.springframework.core.io.DescripiveResource |
定义包含资源描述符,但实际没有可读资源的资源 |
4. org.springframework.core.io.FileSyatemResource |
定义可从文件系统提取的资源 |
5. org.springframework.core.io.InputStreamResource |
定义可从输入流提取的资源 |
6. org.springframework.core.io.UrlResource |
定义可从给定URL提取的资源 |
7. org.springframework.web.portlet.context.PortletContextResource |
定义可用在portlet上下文中的资源 |
8. org.springframework.web.context.support.ServletContextResource |
定义可用在servlet上下文中的资源 |
例如使用FileSystemResource来创建一个XMLBeanFactory,代码如下:
/**
* Bean工厂从"c:/beans.xml"文件中读取Bean的定义信息,并启动容器。
* Bean载入时间:此时,Bean工厂并没有实例化Bean。即Bean是被延迟载入到Bean工厂中的,
* 在需要使用Bean的时候(调用getBean("beanName"))才被实例化。
*/
BeanFactory factory = new XmlBeanFactory(new FileSystemResource("c:/beans.xml"));
/**
* 实例化Bean,并使用依赖注入设置Bean的属性及关联关系等。
*/
MyBean myBean = factory.getBean("myBean");
2. ApplicationContext
:由org.springframework.context.ApplicationContext接口定义,建立在BeanFactory基础之上,提供了系统构架
服务。如:文本信息解析工具,包括对国际化(I18N)的支持;载入文件资源的通用方法;可以向注册为监听器的Bean发送事件等。
ApplicationContext的诸多实现中,经常会用到的有以下三种实现:
ApplicationContext实现
|
描述
|
1. org.springframework.context.support.ClassPathXMLApplicationContext |
从类路径中的XML文件载入上下文定义信息 |
2. org.springframework.context.support.FileSystemXmlApplicationContext |
从文件系统中的XML文件载入上下文定义信息 |
3. org.springframework.web.context.support.XMLWebApplicationContext |
从Web系统中的XML文件载入上下文定义信息 |
从文件系统或者类路径载入应用上下文与将Bean载入BeanFactory类似,例如:
/**
* Bean载入时间:在上下文启动后预载入所有的单实例Bean,确保在使用前已经准备好了,不需要等待它们被创建。
*/
ApplicationContext context1 = new FileSystemXmlApplicationContext("c:/beans.xml");
MyBean myBean = factory.getBean("myBean");
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
MyBean myBean = factory.getBean("myBean");
使用FileSystemXmlApplicationContext与ClassPathXMLApplicationContext的区别是:
前者只能在指定的路径中查找;后者可在整个类路径(包括JAR文件)中查找XML文件。
3. 如何选择使用容器?
ApplicationContext包含BeanFactory的所有功能,几乎所有的应用系统都选择ApplicationContext而不是BeanFactory。
只有在资源很少的情况下,才会考虑采用BeanFactory,如在移动设备上等。
分享到:
相关推荐
一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
Spring产品级的IoC容器是如何作为一个完整的系统实现并运行的?它如何启动?如何完成Bean的解析和载入?又如何实现Bean的生命周期管理? Spring如何简捷地在JVM上实现AOP功能? Spring AOP如何实现Aspect编织...
第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
第二部分深入阐述了各种基于IoC容器和AOP的JavaEE组件在Spring和的实现原理,第三部分讲述了ACEGI安全框架、DM模块以及Flex模块等基于Spring的典型应用的设计与实现。无论你是Java程序员、Spring开发者,还是平台...
一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
第二部分深入阐述了各种基于IoC容器和AOP的JavaEE组件在Spring和的实现原理,第三部分讲述了ACEGI安全框架、DM模块以及Flex模块等基于Spring的典型应用的设计与实现。无论你是Java程序员、Spring开发者,还是平台...
spring-context:上下文,即IOC容器 spring-context-support:对IOC的扩展,以及IOC子容器 spring-context-indexer:类管理组件和Classpath扫描 spring-expression:表达式语句 切面编程: spring-aop:面向切面编程,...
Spring产品级的IoC容器是如何作为一个完整的系统实现并运行的?它如何启动?如何完成Bean的解析和载入?又如何实现Bean的生命周期管理? Spring如何简捷地在JVM上实现AOP功能? Spring AOP如何实现Aspect编织...
Spring产品级的IoC容器是如何作为一个完整的系统实现并运行的?它如何启动?如何完成Bean的解析和载入?又如何实现Bean的生命周期管理? Spring如何简捷地在JVM上实现AOP功能? Spring AOP如何实现Aspect编织...
Spring系列第3篇:Spring容器基本使用及原理。Spring系列第4篇:xml中bean定义详解(-)Spring系列第5篇:创建bean实例这些方式你们都知道?Spring系列第6篇:玩转bean scope,避免跳坑里!Spring系列第7篇:依赖注入...
第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
第一部分详细分析了Spring的核心:IoC容器和AOP的实现,能帮助读者了解Spring的运行机制;第二部分深入阐述了各种基于IoC容器和AOP的Java EE组件在Spring中的实现原理;第三部分讲述了ACEGI安全框架、DM模块以及Flex...
spring容器启动和关闭时事件监听;spring容器启动和关闭时事件监听;spring容器启动和关闭时事件监听
Spring源代码解析(一):IOC容器.doc
1) spring-core : spring的...5) spring-context : spring的核心包,spring的大部分容器功能都是由它来完成的,就像咱今天用的IOC容器就是其中之一 6) spring-jcl : spring的日志管理包,spring进行日志管理的重要jar包