我对这两个概念感到困惑。阅读Spring文档,我发现,例如。 bean工厂是Spring容器。我还读到“ApplicationContext是BeanFactory的完整超集”。但两者之间的差异并不明显。那么区别是什么呢?
答案 0 :(得分:15)
Ajinkya所附的this link的答案非常全面,但是,我想从其他材料中引用一些优点 - Spring in Action(Manning Publications):
在基于Spring的应用程序中,您的应用程序对象将存在于Spring容器中。如图2.1所示,容器将创建对象,将它们连接在一起,配置它们,并管理它们从摇篮到坟墓的整个生命周期(或者根据具体情况来管理new到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,您可以确保它们在需要时可以使用 - 您的应用程序不必等待它们被创建。
答案 1 :(得分:0)
应用程序上下文是IoC容器的实现。
答案 2 :(得分:0)
org.springframework.beans 和 org.springframework.context 包是 Spring Framework 的 IoC 容器的基础。 BeanFactory 接口提供了一种能够管理任何类型对象的高级配置机制。 ApplicationContext 是 BeanFactory 的一个子接口。它增加了与 Spring 的 AOP 特性的更容易集成;消息资源处理(用于国际化),事件发布;和应用层特定上下文,例如用于 Web 应用程序的 WebApplicationContext。
简而言之,BeanFactory 提供了配置框架和基本功能,ApplicationContext 增加了更多特定于企业的功能。 ApplicationContext 是 BeanFactory 的完整超集,在本章中专门用于描述 Spring 的 IoC 容器。
更多详情请见here