Spring Bean的创建过程
📎 2025年Java面试宝典最新整理: 链接: https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g 提取码: 9b3g
作为Java程序员,Spring框架的Bean管理机制是面试必考题。今天咱们就深入聊聊Spring Bean的创建过程,面试被问到时直接按这个思路答,绝对加分!整个过程可以拆解成几个关键阶段:

二、 核心阶段解析
1. 实例化 (Instantiation)
- 触发时机: 当Spring IoC容器需要创建一个Bean时,比如遇到
@Autowired、getBean()请求或容器启动加载单例Bean。 - 关键动作: 容器通过反射(常用
Class.newInstance()或构造器)或指定的工厂方法(如@Bean方法、FactoryBean的getObject())创建Bean的原始对象。此时对象还是个“空壳”,属性没注入,也没初始化。 - 面试点: 常问构造器注入在此阶段发生(如果依赖其他Bean,那些Bean也会按需创建)。
2. 属性赋值/依赖注入 (Population/Populating Properties)
- 核心任务: 给刚创建的Bean填充属性值和解决依赖。
- 实现方式:
- 基于Setter: 调用Bean的Setter方法注入值。
- 基于字段/构造器: 通过反射直接给字段赋值或构造器传参。
- 自动装配 (
@Autowired,@Resource): 容器自动查找匹配的依赖Bean并注入。
- 涉及机制: 依赖查找、类型转换(如果需要)、解决循环依赖(利用三级缓存)。
- 面试重点: 循环依赖的原理(三级缓存:
singletonFactories,earlySingletonObjects,singletonObjects)、@Autowired与@Resource区别。
3. 初始化 (Initialization)
- 目标: 让Bean达到可用状态。
- 关键步骤:
- Aware接口回调: 如果Bean实现了
BeanNameAware,BeanFactoryAware,ApplicationContextAware等接口,容器会回调相应方法,注入上下文信息。 - BeanPostProcessor前置处理 (
postProcessBeforeInitialization): 容器中所有BeanPostProcessor有机会在初始化方法调用前对Bean进行加工(如生成代理)。 - 初始化方法执行:
- 指定初始化方法:
@PostConstruct注解标记的方法。 - 实现
InitializingBean接口: 执行afterPropertiesSet()方法。 - XML配置的
init-method: 执行指定的方法名。
- 指定初始化方法:
- BeanPostProcessor后置处理 (
postProcessAfterInitialization): 在初始化方法执行后,BeanPostProcessor再次对Bean进行处理。这是生成AOP代理的关键时机!
- Aware接口回调: 如果Bean实现了
- 面试高频:
BeanPostProcessor的作用、执行时机、与AOP的关系;@PostConstruct、InitializingBean、init-method的执行顺序。
4. 使用与销毁 (In Use and Destruction)
- 使用: 初始化完成后,Bean放入单例池 (
singletonObjects),可以被应用程序正常获取和使用。 - 销毁: 当容器关闭时(如
ApplicationContext.close()),对单例Bean执行销毁逻辑:- 销毁方法执行:
@PreDestroy注解标记的方法。- 实现
DisposableBean接口: 执行destroy()方法。 - XML配置的
destroy-method: 执行指定的方法名。
- 资源释放: 在此阶段关闭数据库连接、释放文件句柄等。
- 销毁方法执行:

三、 总结与关键点回顾
整个Spring Bean的创建过程核心就是:实例化 -> 属性注入 -> 初始化(包含Aware回调、BeanPostProcessor处理、@PostConstruct等) -> 使用 -> 销毁(@PreDestroy等)。理解这个过程,尤其是依赖注入如何解决、初始化回调的顺序、以及BeanPostProcessor的强大干预能力,是应对Spring相关面试题的基石。
大家在准备面试时,除了理解理论,刷题和看高质量题解也很关键。如果需要购买面试鸭会员来获取海量真题和解析,可以通过面试鸭返利网(mianshiyafanli.com)找我下单,立享25元返利优惠,相当于帮你省了一顿饭钱!用好资源,高效备战。



