Bean 生命周期的详细步骤

第一阶段:Bean 的元数据配置与容器启动
- 配置元数据:首先,你需要通过 XML、Java 注解(如
@Component,@Service,@Autowired)或 Java 配置类(@Configuration,@Bean)来定义 Bean。 - 容器启动:Spring 容器(如
ApplicationContext)启动,加载并解析这些配置元数据,生成每个 Bean 的BeanDefinition对象,它包含了创建一个 Bean 所需的所有信息(如类名、作用域、是否懒加载等)。
第二阶段:Bean 的实例化与初始化(核心生命周期)
1. 实例化(Instantiation)
- 描述:容器首先会调用 Bean 的构造函数(或工厂方法)来创建一个新的实例。此时只是一个简单的 Java 对象,还没有进行依赖注入,我们可以把它比作'新生儿'。
- 扩展点:无直接扩展点。
2. 依赖注入(Populate Properties)
- 描述:Spring 根据配置(如
@Autowired,@Value)将所需的依赖注入到 Bean 的对应属性中。这一步填充了 Bean 的'血肉'。 - 扩展点:无直接扩展点。
3. Aware 接口回调(Aware Interface Injection)
- 描述:如果 Bean 实现了各种
Aware接口,Spring 会在此阶段回调相应的方法,将一些容器相关的对象(如BeanNameAware,BeanFactoryAware,ApplicationContextAware)注入到 Bean 中。 - 扩展点:
BeanNameAware:设置 Bean 的 ID/Name。BeanFactoryAware:设置当前的BeanFactory。ApplicationContextAware:设置当前的ApplicationContext(功能最全)。EnvironmentAware:设置Environment对象(用于获取配置文件属性)等。
4. BeanPostProcessor 前置处理
- 描述:这是极其重要的扩展点。所有实现了
BeanPostProcessor接口的 Bean,它们的postProcessBeforeInitialization方法会在这个阶段被调用。它可以对 Bean 进行包装或增强,返回一个可能是代理对象的 Bean。 - 扩展点:
BeanPostProcessor.postProcessBeforeInitialization(Object bean, String beanName)


