📜  Spring – BeanFactory 和 ApplicationContext 的区别(1)

📅  最后修改于: 2023-12-03 15:05:16.476000             🧑  作者: Mango

Spring - BeanFactory 和 ApplicationContext 的区别

Spring是一个流行的Java应用程序框架,它提供了一种轻量级且灵活的方式来开发应用程序。在Spring中,有两个核心接口来管理和装配对象:BeanFactory 和 ApplicationContext。这两个接口之间有很多区别,本文将逐一介绍。

BeanFactory接口

BeanFactory接口是Spring框架的核心接口之一,它是提供基本的IoC容器支持的轻量级接口。BeanFactory只提供了Spring IoC容器的基本功能,它对Spring IoC容器的核心主要是Bean的创建、装配和维护。

BeanFactory通过读取配置文件或者注解来加载bean,可以让我们在运行时动态装配关系,控制对象之间的依赖关系。BeanFactory在工厂模式的基础上,可以动态地创建对象。

优点
  • 轻量级,占用的系统资源比ApplicationContext低;
  • 按需加载,只有在真正使用Bean的时候才会进行Bean的实例化,可以减少系统启动时的负荷;
  • 可以支持多个配置文件及多种配置方式,例如:XML配置文件、注解等;
  • 稳定、安全、可靠。
缺点
  • 不能支持Spring AOP等高级特性;
  • 没有ApplicationContext的完整特性。
代码示例
// 创建一个BeanFactory实例
Resource resource = new ClassPathResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);

// 获取一个Bean实例
HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");
obj.getMessage();
ApplicationContext接口

ApplicationContext是BeanFactory接口的子接口,是Spring框架运行时IoC容器的实现,派生自BeanFactory接口。ApplicationContext包含了BeanFactory的所有功能,是BeanFactory的超集,它不仅加载Bean的配置信息,同时也支持AOP、事务处理、国际化消息处理等高级特性。

优点
  • ApplicationContext接口比BeanFactory接口功能更加强大,支持更多的特性;
  • 支持国际化资源访问;
  • 支持统一的资源文件访问;
  • 支持ApplicationContext之间的嵌套使用;
  • 支持Bean事件监听;
  • 支持信息源(message sources);
  • 支持抽象类或者接口作为Bean定义的父类。
缺点
  • 占用的系统资源比BeanFactory更高。
代码示例
// 加载配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

// 获取Bean实例
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.getMessage();
总结
  • BeanFactory是Spring框架的基本接口,ApplicationContext是其子接口;
  • BeanFactory的入门门槛低,足以满足基本的IoC容器要求;
  • ApplicationContext支持更多的高级特性,但也会占用更多的系统资源;
  • 使用哪个接口,需要根据具体项目的需求和条件做出选择。