在 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 是“饭店”——饭点前就备好了。
