ApplicationContext介绍:

如果说BeanFactory是Spring的“心脏”,那么ApplicationContext 就是完整的“身躯”了。ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。在BeanFactory中,很多功能需要以编程的方式实现,而在ApplicationContext中则可以通过配置的方式实现。

1. ApplicationContext 类体系结构

ApplicationContext的主要实现类是ClassPathXmlApplicationContext 和FileSystemXmlApplicationContext,前者默认从类路径加载配置文件,后者默认从文件系统中装载配置文件。下面了解一下 ApplicationContext的类继承体系,如图

从图可以看出,ApplicationContext 继承了HierarchicalBeanFactory 和ListableBeanFactory接口,在此基础上,还通过多个其他的接口扩展了BeanFactory 的功能。这些接口如下。
1、ApplicationEventPublisher: 让容器拥有发布应用上下文事件的功能,包括容器启动事件、关闭事件等。实现了ApplicationListener 事件监听接口的Bean可以接收到容器事件,并对事件进行响应处理。在ApplicationContext 抽象实现类
ArtitaplicatiContet中存在一个AipioinMiacaste它负责保存所有的监听器,以便在容器产生上下文事件时通知这些事件监听者。
2、MessageSource: 为应用提供il8n国际化消息访问的功能。

3、ResourcePattermResolver: 所有ApplicationContext 实现类都实现了类似于
PathMatchingResourcePattermResolver的功能,可以通过带前缀的Ant风格的资源文件路径装载Spring的配置文件。

4、LifeCycle: 该接口提供了start0和stop0两个方法,主要用于控制异步处理过程。在具体使用时,该接口同时被ApplicationContext 实现及具体Bean 实现,ApplicationContext会将start/stop 的信息传递给容器中所有实现了该接口的Bean,以达到管理和控制JMX、任务调度等目的。
ConfigurableApplicationContext扩展于ApplicationContext,它新增了两个主要的方法: refresh0和 close0,让ApplicationContext具有启动、刷新和关闭应用上下文的能力。在应用上下文关闭的情况下调用refresh(即可启动应用上下文,在已经启动的状态下调用refreshO则可清除缓存并重新装载配置信息,而调用close(0则可关闭应用上下文。这些接口方法为容器的控制管理带来了便利,但作为开发者,我们并不需要过多关心这些方法。和BeanFactory初始化相似,ApplicationContext 的初始化也很简单。如果配置文件放置在类路径下,则可以优先考虑使用ClassPathXmlApplicationContext实现类。

ApplicationContext ctx = new ClassPathXmlApplicationContext("com/matao/context/beans.xml");

对于ClassPathXmlApplicationContext来说,“com/matao/context.beans.xml”相当于“classpath:com/matao/context/beans.xml”。
如果配置文件放在了文件系统的路径下,则优先考虑使用FileSystemXmlApplicationContext实现类

ApplicationContext ctx = new FileSystemXmlApplicationContext("com/matao/context/beans.xml");

对于FileSystemXmlApplicationContext来说,“com/matao/context.beans.xml”相当于“file:com/matao/context/beans.xml”。
还可以指定一组配置文件, Spring 会自动将多个配置文件在内存中“整合”成一个配置文件,如下:

ApplicationContext ctx = new ClassPathXmlApplicationContext (new String[]("conf/beans1 .xml", "conf/beans2. xml");

当然,FileSystemXlApplicationContext 和lassathXmlpplicationContext都可以显式使用带资源类型前缀的路径,它们的区别在于如果不显式指定资源类型前缀,则分别将路径解析为文件系统路径和类路径。在获取ApliationContext实例后,就可以像BeanFactory一样调用getBeanbeanName)返回Bean了opplicationContext的初始化和BeanFactory有一个重大的区别: BeanFactory在初始化容器时,并未实例化Bean,直到第一 -次访问某个Bean时才实例化目标Bean;而ApplicationContxt则在初始化应用上下文时就实例化所有单实例的Bean. 因此,ApplicationContext的初始化时间会比BeanFactory稍长一些,不过稍后的调用则没有“第一次惩罚”的问题。

Spring支持基于类注解的配置方式,主要功能来自于Spring一个叫JavaConfig的子项目。javaConfig已经升级为Spring核心框架的一部分。一个标注@Configuration注解的POJO类即可提供Spring所需的Bean的配置信息

  //①表示是个配置信 息提供类@Configurationpublic class Beang {//②定义一个BeanQBean(name = "car")public Car buildcar() {Car car = new Car() ;car .setBrand ("红旗CA72");car.setMaxSpeed (200) ;return car;

和基于XML文件的配置方式相比,类注解的配置方式可以很容易地让开发者控制Bean的初始化过程,比基于XML文件的配置方式更加灵活。

Spring为基于注解类的配置提供了专门的ApplicationContext实现类:AnnotationConfigApplicationContext。来看-一个使用AnnotationConfigApplicationContext启动Spring容器的示例,如所示。

public class AnnotationAppl icationContextTest {@Testpublic void getBean() (//①通过一个带Configuration的POJO装载Bean配置ApplicationContext ctx = new AnnotationConfigApplicationContext (Beans .class) ;Car car =ctx. getBean ("car", Car.class);assertNotNull(car) ;

AnntationConfigApplicationContext将加载Beans.class 中的Bean 定义并调用Beans.class中的方法实例化Bean,启动容器并装配Bean.

Spring之ApplicationContext介绍相关推荐

  1. spring之基本介绍以及老版本框架的下载地址

    spring之基本介绍以及老版本框架的下载地址 第一:为什么要学习spring?学习spring能为我们在工作中的日常开发带来什么好处? 首先来了解一下spring:spring是一种开源的分层的相对 ...

  2. Spring的完整介绍

    1 Spring简介 1.1 Spring是什么 Spring是分层的JavaSE/EE应用full-stack(全栈:各层都有对应的解决方案)轻量级开源框架,以IOC(Inverse of Cont ...

  3. spring的DI,IOP,AOC,Spring的简单介绍

    回顾: 1. mybatis的性能优化.一级缓存.减轻数据库的压力.默认开启.一级缓存是线程级别,sqlSession,缓存数据的map就放在sqlSession中的PerpetualCache的中. ...

  4. Spring框架的介绍以及搭建

    Spring框架的介绍以及搭建 1.框架和架构 1.1.什么是框架 1.2 架构的发展历程 2.Spring 2.1.Spring框架的优势 3.IOC 3.1.什么是IOC 4.Maven 4.搭建 ...

  5. Java工具类解决Spring初始化ApplicationContext为null的问题

    今天临时加了个需求,我想着用 Spring 来装载,配合 localcache 这样就能做到无感在 web 启动的时候预先将需要的数据加载到内存中.以便于以后直接拿来使用,不用再次进行加载. 目录 A ...

  6. Spring获取ApplicationContext方式,和读取配置文件获取bean的几种方式

    Spring获取ApplicationContext方式 我自己常用的方法: 读取一个文件1 //创建Spring容器 2 ApplicationContext ctx = new ClassPath ...

  7. Spring中ApplicationContext加载机制和配置初始化

    转自:http://liuwei1578.blog.163.com/blog/static/495803642007116111923195/ Spring中ApplicationContext加载机 ...

  8. Spring Security 基本介绍,初窥路径

    Spring Security 基本介绍和环境搭建 实验介绍 Spring Security 是一个非常强大的身份验证和授权控制框架.为了满足企业项目的不同需求,它提供了很多定制化开发的解决方案,通过 ...

  9. Spring Cloud Gateway介绍(二)

    Spring Cloud Gateway介绍(一) 全局Filters GlobalFilter与GatewayFilter具有一样的接口. 这些全局过滤器都有对应的配置类,例如: org.sprin ...

最新文章

  1. 【青少年编程】【Scratch】04 事件模块
  2. sqlserver 新建只读权限用户
  3. Unix环境高级编程学习笔记(七) 多线程
  4. VisualStudio2019配置OpenCV
  5. java中不带package和带package的编译运行方式
  6. VisualStudioAddIn2017.vsix的下载安装和使用
  7. mysql触发器如何获取当前表名_MCGS pro组态环境下,如何获取当前用户名,在画面上显示?...
  8. js 開始时间,当前时间,结束时间的比較
  9. Matcher的group()/group(int group)/groupCount()用法介绍
  10. 关于level_idc
  11. JSPServlet相关
  12. 守望先锋游戏反外挂技术测评
  13. 飞机大战源码php,飞机大战源码 - 丁小未的个人页面 - OSCHINA - 中文开源技术交流社区...
  14. 计算机调用计算器快捷键,电脑计算器快捷键 电脑计算器快捷键如何设置
  15. 阿里云香港服务器被打流量攻击怎么办
  16. 近代光学系统设计概论学习笔记-第四章双胶合和双分离消色差物镜
  17. 使用文件保险箱加密 Mac 上的启动磁盘
  18. 2020金融科技领域最具商业合作价值企业盘点
  19. springboot2
  20. java调用kettle自定义kettle.properties配置文件路径

热门文章

  1. hdu 4544 湫湫系列故事——消灭兔子
  2. SSD《一》-- 基础知识
  3. 离散数学序关系求解最大/小元,极大/小元,上/下届,上/下确界
  4. 藏宝阁上架服务器信息错误,苦行虚空,难道在处罚中也能上架藏宝阁吗?
  5. Python “ValueError: incomplete format” upon print(“stuff %” % “thingy”) 解决方法
  6. LaTeX Error: File `numcompress.sty‘ not found. 解决方案
  7. Latex出现错误:File ‘citesort.sty‘ not found.
  8. 计算机网络之网络应用--DNS应用
  9. 论文投稿指南——中文核心期刊推荐(机械、仪表工业)
  10. MapReduce系列之MapReduce的输出