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