Spring 容器深度解析:从 BeanFactory 到 ApplicationContext 的体系与实践
Spring 容器是 IOC(控制反转)思想的具体实现,核心职责是管理 Bean 的生命周期(创建、装配、销毁)与依赖关系,是 Spring 框架的 “心脏”。Spring 提供了两类核心容器:BeanFactory(基础容器)和 ApplicationContext(高级容器),二者在功能、初始化策略和适用场景上存在显著差异。从 “容器体系→核心实现→关键区别→Bean 定义元数据” 四个维度,彻底拆解 Spring 容器的工作机制。
Spring 容器体系总览
Spring 容器基于 “分层设计”,从基础到高级形成完整体系,核心接口与实现类的关系如下:
![spring容器]()
核心设计思路:BeanFactory 定义基础规范,ApplicationContext 在其之上扩展高级功能,满足不同场景需求(轻量级 vs 企业级)。
基础容器:BeanFactory 详解
BeanFactory 是 Spring 容器的顶层接口,定义了 IOC 容器的最小功能集 ——“获取 Bean、判断 Bean 状态”,是 Spring 框架内部使用的基础容器(面向框架基础设施)。
1. BeanFactory 核心接口与方法
public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
Object getBean(String name) throws BeansException;
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
Object getBean(String name, Object... args) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
boolean containsBean(String name);
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
String[] getAliases(String name);
}
关键方法解析:
FACTORY_BEAN_PREFIX = "&":特殊前缀,用于获取FactoryBean本身(而非其生成的对象)。例如:
getBean("userFactory"):获取 userFactory 这个 FactoryBean 生成的 User 对象;
getBean("&userFactory"):获取 userFactory 这个 FactoryBean 实例本身。
getBean 重载:支持多种获取方式,按类型获取(getBean(Class<T>))是最常用的,避免强转,更安全。
- 单例 / 原型判断:
isSingleton 和 isPrototype 对应 Bean 的 scope 配置(默认单例)。
2. BeanFactory 的核心子类
BeanFactory 接口本身不实现具体逻辑,其功能通过三个核心子类扩展: