按执行顺序分为 5 大阶段:实例化 → 依赖注入 → 初始化 → 就绪使用 → 销毁,下面是完整详细流程:
一、完整执行流程(11步)
-
实例化(Instantiation)
Spring 通过反射创建 Bean 对象,此时对象已存在,但属性为空。
-
填充属性(依赖注入 Populate properties)
自动装配 @Autowired、@Resource、XML 配置的属性,完成依赖注入。
-
执行 Aware 接口回调
依次执行:
◦ BeanNameAware.setBeanName()
◦ BeanFactoryAware.setBeanFactory()
◦ ApplicationContextAware.setApplicationContext()
-
Bean 前置处理(BeanPostProcessor 前置)
postProcessBeforeInitialization(),可对 Bean 做前置增强。
-
执行 InitializingBean 接口
重写 afterPropertiesSet() 方法,完成自定义初始化逻辑。
-
执行 @PostConstruct 注解方法
标注 @PostConstruct 的方法执行。
-
执行 XML 或 @Bean 指定的 init-method
配置的初始化方法。
-
Bean 后置处理(BeanPostProcessor 后置)
postProcessAfterInitialization(),可做 AOP 代理、动态增强。
-
Bean 就绪(就绪可用)
放入单例池,供业务使用。
-
容器关闭时执行销毁方法
顺序:
◦ @PreDestroy
◦ DisposableBean.destroy()
◦ XML / @Bean 指定的 destroy-method
- Bean 销毁完成
二、初始化执行优先级(重点考点)
@PostConstruct > InitializingBean > init-method
三、销毁执行优先级
@PreDestroy > DisposableBean > destroy-method
四、一句话总结
实例化 → 依赖注入 → Aware → 前置后置处理器 → 初始化 → 使用 → 销毁