1. BeanFacotry
    1. BeanFactory提供了一种先进的配置机制来管理任何种类bean(对象),这种配置机制考虑到任何一种可能的存储方式
  2. ApplicationContext
    1. 建立在BeanFactory,具有BeanFactory的所有功能和行为
    2. MessageSource, 提供国际化的消息访问
      1. 扩展了MessageResource接口
    3. 资源访问,如URL和文件
    4. 事件传播
    5. 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层
  3. 不同点
    1. 选用哪个
      1. BeanFactory是延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常
      2. ApplicationContext则在初始化自身是检验,这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用ApplicationContext
    2. 特性表
      1. 特性 BeanFactory ApplicationContext
      2. Bean 实例化/装配 Yes Yes
      3. 自动 BeanPostProcessor 注册 No Yes
      4. 自动 BeanFactoryPostProcessor 注册 No Yes
      5. 便捷的 MessageSource 访问( i18n) No Yes
      6. ApplicationEvent 发送 No Yes
    3. 关系
      1. BeanFactory提供了配置框架和基本的功能
      2. ApplicationContext建立在BeanFactory之上,并增加了其他的功能
      3. 一般来说,ApplicationContext是BeanFactory的完全超集, 任何BeanFactory功能和行为的描述也同样被认为适用于ApplicationContext