ApplicationContext接口


在使用Spring的时候,我们经常需要先得到一个ApplicationContext对象,然后从该对象中获取我们配置的Bean对象。ApplicationContext隶属于org.springframework.context,是SpringFramework中Bean的管理者,为SpringFramework的诸多功能提供支撑作用。

下图是Spring-4.3.3.RELEASE版本中ApplicationContext相关的UML类视图(浅绿色的为接口,浅黄色的为类):

BeanFactory系列接口:

public interface BeanFactory

BeanFactory 是 Spring 管理 Bean 的最顶层接口,是一个 Bean 容器, 管理一系列的 bean,每一个 bean 使用一个String 类型的 name(或称之为id) 来唯一确定,这些 Bean 可以是 prototype 的或者 singleton的 。Spring 提倡使用依赖注入(Dependency Injection) 的方式装配 Bean。BeanFactory从“configuration source”加载Bean的定义,configuration source 可以是xml文件或者properties文件甚至是数据库。

public interface HierarchicalBeanFactory extends BeanFactory

BeanFactory的子接口HierarchicalBeanFactory是一个具有层级关系的Bean 工厂,拥有属性parentBeanFactory。当获取 Bean对象时,如果当前BeanFactory中不存在对应的bean,则会访问其直接 parentBeanFactory 以尝试获取bean 对象。此外,还可以在当前的 BeanFactory 中 override 父级BeanFactory的同名bean。

public interface ListableBeanFactory extends BeanFactory

ListableBeanFactory 继承了BeanFactory,实现了枚举方法可以列举出当前BeanFactory中所有的bean对象而不必根据name一个一个的获取。 如果 ListableBeanFactory 对象还是一个HierarchicalBeanFactory则getBeanDefinitionNames()方法只会返回当前BeanFactory中的Bean对象而不会去父级BeanFactory中查询。

ApplicationContext接口的功能说明:

public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver

ApplicationContext接口继承众多接口,集众多接口功能与一身,为Spring的运行提供基本的功能支撑。根据程序设计的“单一职责原则”,其实每个较顶层接口都是“单一职责的”,只提供某一方面的功能,而ApplicationContext接口继承了众多接口,相当于拥有了众多接口的功能,下面看看它的主要功能:

  • 首先,它是个BeanFactory,可以管理、装配bean,可以有父级BeanFactory实现Bean的层级管理(具体到这里来说它可以有父级的ApplicationContext,因为ApplicationContext本身就是一个BeanFactory。这在web项目中很有用,可以使每个Servlet具有其独立的context, 所有Servlet共享一个父级的context),它还是Listable的,可以枚举出所管理的bean对象。
  • 其次,它是一个ResourceLoader,可以加载资源文件;
  • 再次,它可以管理一些Message实现国际化等功能;
  • 还有,它可以发布事件给注册的Listener,实现监听机制。

ApplicationContext两个比较常用的实现类:

  • ClassPathXmlApplicationContext: 使用类路径方式初始化ioc容器(推荐使用)
  • FileSystemApplicationContext:  使用文件系统的方式初始化ioc容器

1) 演示ClassPathXmlApplicationContext:

/*** @author http://www.yiidian.com**/
public class Demo2 {@Testpublic void test1(){/*** 方式一:类路径方式加载,默认在类路径的根目录下(也就是src目录下)*/ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");CustomerDao customerDao = (CustomerDao)ac.getBean("customerDao"); System.out.println(customerDao);}
}

2)演示FileSystemApplicationContext: 

绝对路径:

@Testpublic void test2(){/*** 方式二:使用文件系统的方式初始化ioc容器*///2.1 绝对路径ApplicationContext ac = new FileSystemXmlApplicationContext("E:\\workspaces\\yiidian_spring\\02.spring-ioc-helloworld\\src\\applicationContext.xml");CustomerDao customerDao = (CustomerDao)ac.getBean("customerDao"); System.out.println(customerDao);}

相对路径:

@Testpublic void test3(){/*** 方式二:使用文件系统的方式初始化ioc容器*///2.2 相对路径ApplicationContext ac = new FileSystemXmlApplicationContext("./src/applicationContext.xml");CustomerDao customerDao = (CustomerDao)ac.getBean("customerDao"); System.out.println(customerDao);}

源码下载:http://pan.baidu.com/s/1hrA2sV6

Spring4.x(5)--ApplicationContext接口相关推荐

  1. BeanFactory和ApplicationContext接口的联系和区别

    使用BeanFactory从xml配置文件加载bean: import org.springframework.beans.factory.xml.XmlBeanFactory; import org ...

  2. ApplicationContext接口不同应用场景的实现

    四种较常见的 ApplicationContext 实现方式(针对不同场景的实现容器) (1)ClassPathXmlApplicationContext:从ClassPath的XML配置文件中读取上 ...

  3. Spring : Spring的ApplicationContext接口

    1.美图 2.拓扑图 3.源码 public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, ...

  4. SSM 整合 4:Spring IoC 容器基于的两个重要接口 BeanFactory 和 ApplicationContext

    文章目录 前言 一.BeanFactory 接口 1.1.加载 Spring 配置文件创建 BeanFactory 接口实例 1.2.开发中的运用以及使用说明 二.ApplicationContext ...

  5. Spring4实战读书笔记

    Spring4实战读书笔记 首先,我们需要明白,为什么我们需要引入Spring,也就是说Spring的好处.个人觉得主要是在于两方面解耦和对bean的管理. 第一部分:Spring核心 共分为四个章节 ...

  6. Spring源码——容器扩展ApplicationContext

    前言 内容主要参考自<Spring源码深度解析>一书,算是读书笔记或是原书的补充.进入正文后可能会引来各种不适,毕竟阅读源码是件极其痛苦的事情. 本文主要涉及书中第六章的部分,依照书中内容 ...

  7. applicationcontext获取bean_Spring IoC之ApplicationContext

    概述 在 Spring之IoC理论一章中提到关于 IoC 的学习主要涉及到五大模块,从 Resource 和 ResourceLoader 用于资源管理开始,然后讲述 BeanDefinitionRe ...

  8. 在代码中获取ApplicationContext实例

    基于Spring的Java应用会通过ApplicationContext接口提供应用程序配置.我们常常需要在代码中获取当前的ApplicationContext.如在集成测试时,需要通过Applica ...

  9. 还不知道BeanFactory和ApplicationContext的区别?

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 转载自公众号:日拱一兵 关注我,回复口令获取可获取独家整理的学习资料: - 001:领取<Spr ...

最新文章

  1. 2.monotouch 控件的使用
  2. ie9怎么开兼容模式
  3. JAVA多线程之扩展ThreadPoolExecutor
  4. 机器学习之必知开源数据集
  5. 网络安装archlinux(2012.8.20)笔记
  6. Java中线程的创建有两种方式
  7. 用微软的压力测试工具进行拒绝服务攻击
  8. Hyperledger Fabric教程(9)-- peer命令-通道channel
  9. spring StopWatch用法
  10. android+世界地图高清版大图片,世界地图全图高清版
  11. 2019年畅销好书大盘点,有你喜欢的书吗?
  12. [含lw+源码等]微信小程序在线考试管理系统+后台管理系统[包运行成功]
  13. HDU 5643 King's Game 【约瑟夫环】
  14. 超声波塑料焊接发生器驱动电源设计
  15. Mac搭建轻量级BI工具Superset(一)
  16. 道路建设(最小生成树)
  17. gperftools的pprof安装
  18. FM17550读不到身份证UID的问题
  19. 深入了解电容(一):电容简介
  20. 力扣LeetCode算法题第2题-两数之和(二)

热门文章

  1. 5005.boost之asio简单反射型服务器客户端
  2. STM32网络之SMI接口
  3. 计算机组成原理4位ALU运算器设计,计算机组成原理课程设计-alu设计和4位锁存器设计.doc...
  4. 视频封面自动播放两秒钟html,使用videojs轻松搭建一个播放器
  5. win7不显示移动硬盘_win7系统电脑开机不显示桌面?
  6. 【蓝桥杯单片机】DS1302时钟芯片+DS18B20单总线温度传感器(官方驱动源码改写)
  7. linux多线程学习(六)——信号量实现同步
  8. linux默认安装数据库密码是多少,Linux服务器上安装MySql数据库(默认安装,密码为空),首次使用需要修改密码(示例代码)...
  9. Mysql优化之Order By/Group By
  10. 电脑一族,打电脑时候的健康的坐姿