Spring 中的 BeanFactory 和 ApplicationContext
在 Spring 中,BeanFactory 和 ApplicationContext 都是 IOC 容器的实现接口,负责管理 Bean 的生命周期和依赖注入。但它们之间确实有一些关键区别。
🔍 一、什么是 BeanFactory?
BeanFactory是 Spring 最基础的 IOC 容器接口,提供了最基本的功能,比如:
- Bean 的创建、管理、获取
BeanFactory factory = new XmlBeanFactory(new FileSystemResource("beans.xml"));
MyBean bean = (MyBean) factory.getBean("myBean");
✅ 特点:
- 懒加载:只有在你 getBean()时才创建对象
- 功能简单,适合资源受限环境(如 IoT)
🌱 二、什么是 ApplicationContext?
ApplicationContext是BeanFactory的 子接口,它在BeanFactory基础上扩展了更多高级功能。
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
MyBean bean = context.getBean(MyBean.class);
✅ 除了 BeanFactory 的功能,还提供了:
| 功能 | 说明 | 
|---|---|
| 国际化 | 支持消息资源 MessageSource | 
| 事件机制 | ApplicationEvent 发布和监听 | 
| 自动 Bean 注册 | 通过注解或包扫描自动注册 | 
| 资源访问 | 支持访问文件、URL、classpath 资源 | 
| Bean 后处理器 | 支持 BeanPostProcessor、AOP 等 | 
| 集成 Spring Boot | ApplicationContext是 Boot 的基础容器 | 
🆚 三、BeanFactory vs ApplicationContext 对比表
| 对比项 | BeanFactory | ApplicationContext | 
|---|---|---|
| 是否延迟加载 | ✅ 是 | ❌ 否(启动时加载所有单例 Bean) | 
| 是否支持 AOP | ❌ 不完全支持 | ✅ 支持 | 
| 国际化支持 | ❌ 无 | ✅ 有 | 
| 事件监听 | ❌ 不支持 | ✅ 支持 | 
| 配置方式 | 基于 XML | XML、注解、JavaConfig | 
| 使用场景 | 内存小、功能简单的系统 | 企业级开发、推荐默认使用 | 
🧠 四、一句话总结:
BeanFactory是原始版,适合低资源场景;
ApplicationContext是升级版,更强大、更智能、是我们开发中 99% 使用的容器。
你可以简单记住:
 🧊 BeanFactory 是“冰箱”——需要时去拿,
 🔥 ApplicationContext 是“饭店”——饭点前就备好了。
