BeanFactory 还是 ApplicationContext?
简单的说:除非你有更好的理由,否则尽量使用ApplicationContext,下面是对于哪些"为什么"等等更深入的建议
ApplicationContext包含BeanFactory的所有功能。通常建议比BeanFactory优先,除非有一些限制的场合如字节长度对内存有很大的影响时(Applet)。然后,绝大多数"典型的"企业应用和系统,ApplicationContext就是你需要使用的。Spring2.0及以上版本,大量使用了link linkend="beans-factory-extension-bpp">BeanPostProcessor扩展(以便应用代理等功能),如果你选择BeanFactory则无法使用相当多的支持功能,如事务和AOP,这可能会导致混乱,因为配置并没有错误。
下面的功能矩阵列出了BeanFactory提供的功能和ApplicationContext提供的功能(包括其实现)。(下一节更深度的描述了ApplicationContext比BeanFactory更强的功能。)
表 3.5. Feature Matrix特性表
特性 BeanFactory ApplicationContext
Bean 实例化/装配 Yes Yes
自动 BeanPostProcessor 注册 No Yes
自动 BeanFactoryPostProcessor 注册 No Yes
便捷的 MessageSource 访问( i18n) No Yes
ApplicationEvent 发送 No Yes
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
public class XmlConfigWithBeanFactory {
public static void main(String[] args) {
XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource(
"build/beans.xml"));
}
}
public class XmlConfigWithApplication{
public static void main(String[] args){
ApplicationContext application = new ClassPathXmlApplicationContext(beans.xml"));
application.getBean("BeanName");
}
}
ApplicationContext和BeanFacotry相比,提供了更多的扩展功能,但其主要区别在于后者是延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常;而ApplicationContext则在初始化自身是检验,这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用ApplicationContext.
分享到:
相关推荐
其中,核心容器是Spring的基础,主要包括BeanFactory和ApplicationContext,它们实现了控制反转(IOC)和依赖注入(DI)。 【控制反转(IOC)和依赖注入(DI)】 控制反转(IOC)是一种设计思想,意味着将对象的...
- **综合使用BeanFactory与ApplicationContext**:在实际项目中,通常会结合使用BeanFactory和ApplicationContext。前者更多地用于底层的IoC容器管理,后者则用于更高级别的应用程序上下文配置。 #### 六、结论 - ...
包括使用Spring Data进行MongoDB 4.0事务处理、构建message-driven微服务、Spring Boot配置、前端集成、日志管理、WebFlux错误处理以及BeanFactory和ApplicationContext的区别等。以下是对这些知识点的详细说明: 1...
- **BeanFactoryAware and ApplicationContextAware**:类似的接口,允许Bean获取BeanFactory或ApplicationContext的引用。 - **PropertyPlaceholderConfigurer**:用于处理外部属性文件的配置问题。 综上所述,...
Spring容器是实现IoC和DI的基础,它可以是BeanFactory或ApplicationContext。容器负责管理对象的生命周期,创建、初始化、配置以及管理对象间的依赖关系。 **IoC类型**: Spring支持两种IoC容器类型:BeanFactory和...
Spring 框架是一个开源的Java企业级应用开发框架,由Rod Johnson在其著作《Expert One-on-One J2EE Design and Development》中首次提出。它的设计理念是简化Java应用程序的开发,通过控制反转(IoC)和面向切面编程...
- ApplicationContext是BeanFactory的高级版本,提供了更多的功能,如国际化支持、事件传播、资源访问等。 - **Added Functionality of the ApplicationContext** - **使用MessageSource**:ApplicationContext...
Spring的核心容器由BeanFactory和ApplicationContext组成: 1. `BeanFactory`:基础的IOC容器,负责初始化和管理Bean,以及调用它们的生命周期方法。配置信息通常通过XML文件提供,如`applicationContext.xml`。 2...
它允许开发者通过BeanFactory或ApplicationContext来管理对象的生命周期和依赖关系,这样可以降低组件间的耦合度,提高代码的可测试性和可维护性。BeanFactory作为基础的IoC容器,负责创建、配置和管理Bean,而...
这个模块主要包括ApplicationContext和BeanFactory。ApplicationContext是Spring的核心接口,提供了加载配置、创建和管理Bean的能力,同时还支持国际化和事件传播。BeanFactory则是更基础的容器,负责实例化、配置和...
#### 三、Spring 的核心组件:Beans, BeanFactory 和 ApplicationContext ##### 1. Beans - **Bean 定义**: Bean 定义是 Spring IoC 容器中的基本单位,描述了 Bean 的配置信息,如类名、作用域、生命周期回调方法...
1. **核心容器**:包含Spring框架的基础组件,如BeanFactory和ApplicationContext。 2. **数据访问/集成**:提供了JDBC抽象层、ORM(如Hibernate)集成支持以及JMS和邮件发送等功能。 3. **Web模块**:包含面向Web...
BeanFactory是基本的容器,而ApplicationContext在BeanFactory的基础上增加了更多企业级服务,如消息源和国际化支持。 除了核心容器,Spring还提供了数据访问/集成、Web、AOP、工具和测试等模块,可以方便地整合...
2. **ApplicationContext**:它继承自BeanFactory,除了提供BeanFactory的所有功能之外,还提供了更多的高级特性。例如,它支持资源绑定、事件传播、消息源以及应用程序级别的事件传播等。在实际应用中,通常推荐...
1. **核心容器**:这是Spring框架的基础,包括BeanFactory和ApplicationContext。BeanFactory是Spring的底层容器,负责管理对象(bean)的生命周期和依赖关系。ApplicationContext则在BeanFactory的基础上提供了更多...