请描述Spring IoC容器从启动到可用的整个初始化流程,包括关键步骤和顺序。
考察说明
考查对Spring IoC容器启动机制和核心流程的理解
回答思路
- 【回答框架 1】IoC容器的初始化是从Resource定位开始的,即根据配置信息(如XML、注解或Java配置)定位并加载Bean定义资源,将其封装为BeanDefinition对象。
- 【回答框架 2】接着是BeanDefinition的注册与解析,容器会解析配置中的每个Bean定义,并存储到BeanDefinitionRegistry中。
- 【回答框架 3】然后通过BeanFactoryPostProcessor接口对BeanDefinition进行后处理,如PropertyPlaceholderConfigurer会替换占位符,实现配置动态化。
- 【回答框架 4】随后容器会实例化单例Bean,顺序上先处理BeanPostProcessor和Aware接口,再执行init-method或InitializingBean回调。
- 【回答框架 5】在执行初始化时,若Bean依赖其他Bean,容器会先递归初始化依赖,从而完成整个Bean的创建与依赖注入。
- 【关键点 1】Resource定位与BeanDefinition加载是初始化第一步。
- 【关键点 2】BeanFactoryPostProcessor可修改Bean定义,如占位符替换。
- 【关键点 3】Bean实例化前需注册BeanPostProcessor。
- 【关键点 4】单例Bean在容器启动时实例化,遵循依赖顺序。
- 【关键点 5】初始化回调顺序包含Aware接口、init-method等。
- 【易错点 1】不要把BeanFactoryPostProcessor和BeanPostProcessor的作用混淆。
- 【易错点 2】不要忽略BeanPostProcessor在实例化前后的应用时机。
- 【易错点 3】不能说所有Bean都是启动时实例化,原型Bean是懒加载的。