【问题标题】:What is the difference between a Spring application context and a Spring container?Spring 应用程序上下文和 Spring 容器有什么区别?
【发布时间】:2012-05-05 09:56:54
【问题描述】:

我对这两个概念有点困惑。阅读 Spring 文档,我发现,例如。 bean 工厂是 Spring 容器。我还读到“ApplicationContext 是 BeanFactory 的完整超集”。但两者之间的区别并不明显。那么区别是什么呢?

【问题讨论】:

  • 检查 stackoverflow.com/questions/243385/… 以了解应用程序上下文与 Bean 工厂
  • 术语也让我感到困惑,在阅读了各种资料后,我发现容器基本上是 bean 实际存在的地方,而 Spring 设计的方式就是您可以使用上下文访问这些 bean 和许多其他功能。Spring 有用于各自目的的几种上下文实现。

标签: spring


【解决方案1】:

org.springframework.beans 和 org.springframework.context 包是 Spring Framework 的 IoC 容器的基础。 BeanFactory 接口提供了一种高级配置机制,能够管理任何类型的对象。 ApplicationContext 是 BeanFactory 的子接口。它增加了与 Spring 的 AOP 特性的更容易集成;消息资源处理(用于国际化)、事件发布;以及应用层特定的上下文,例如用于 Web 应用程序的 WebApplicationContext。

简而言之,BeanFactory 提供了配置框架和基本功能,ApplicationContext 增加了更多企业特定的功能。 ApplicationContext 是 BeanFactory 的完整超集,在本章中专门用于描述 Spring 的 IoC 容器。

更多详情可以查看here

【讨论】:

    【解决方案2】:

    应用程序上下文是 IoC 容器的实现。

    【讨论】:

      【解决方案3】:

      Ajinkya 所附this link 的答案非常全面,但是,我想参考其他材料的一些优点 - Spring in Action(Manning Publications):

      在基于 Spring 的应用程序中,您的应用程序对象将存在于 Spring 容器中。如图 2.1 所示,容器将创建对象,将它们连接在一起,配置它们,并管理它们从摇篮到坟墓的完整生命周期(或新到 finalize(),视情况而定)。

      没有单一的 Spring 容器。 Spring 附带了几个容器实现,可以分为两种不同的类型。 Bean 工厂(由 org.springframework.beans.factory.BeanFactory 接口定义)是最简单的容器,为 DI 提供基本支持。应用程序上下文(由 org.springframework.context.ApplicationContext 接口定义)通过提供应用程序框架服务构建在 bean 工厂的概念之上,例如从属性文件解析文本消息的能力以及将应用程序事件发布给感兴趣的能力事件监听器。

      从表面上看,ApplicationContext 与 BeanFactory 非常相似。两者都加载 bean 定义,将 bean 连接在一起,并根据请求分配 bean。但 ApplicationContext 提供了更多功能:

      • 应用程序上下文提供了一种解析文本消息的方法,包括支持这些消息的国际化 (I18N)。
      • 应用程序上下文提供了一种加载文件资源(例如图像)的通用方式。
      • 应用程序上下文可以将事件发布到注册为侦听器的 bean。

      由于它提供的附加功能,在几乎所有应用程序中,ApplicationContext 都优于 BeanFactory。您可能会考虑使用 BeanFactory 的唯一情况是在资源稀缺的情况下,例如移动设备。

      除了应用程序上下文提供的附加功能外,应用程序上下文和 bean 工厂之间的另一个重大区别是单例 bean 的加载方式。 bean 工厂延迟加载所有 bean,延迟 bean 创建直到调用 getBean() 方法。应用程序上下文更智能一些,它会在上下文启动时预加载所有单例 bean。通过预加载单例 bean,您可以确保它们在需要时可以使用——您的应用程序不必等待它们被创建。

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 1970-01-01
        • 2016-11-29
        • 2015-03-18
        • 1970-01-01
        • 1970-01-01
        • 2019-04-18
        • 2014-06-12
        • 1970-01-01
        相关资源
        最近更新 更多