Spring Bean的生命周期执行流程
Spring Bean的生命周期执行流程涵盖了从Bean的创建到销毁的整个过程,以下是详细的执行流程:
一、创建前准备阶段
- Bean定义阶段:
- Spring容器启动,读取配置文件(如XML文件、Java注解或Java配置类)并解析配置元数据。
- 解析完成后,Spring将Bean定义信息注册到BeanDefinitionRegistry中。BeanDefinitionRegistry是一个存储Bean定义的注册表,它为后续的Bean创建提供了基础信息。BeanDefinition包含了Bean的类名、作用域、依赖关系等元数据。
二、创建实例阶段
- 实例化Bean:
- 当需要使用某个Bean时,Spring容器会根据BeanDefinition信息创建Bean的实例。
- 创建实例的方式有多种,包括使用无参构造函数、有参构造函数、静态工厂方法或实例工厂方法。
三、依赖注入阶段
- 注入依赖:
- 在Bean实例创建完成后,Spring会根据BeanDefinition中的依赖关系,将其他Bean或配置值注入到当前Bean的属性中。
- 注入方式包括构造方法注入、Setter方法注入和字段注入。
四、初始化阶段
- Aware接口回调:
- 如果Bean实现了BeanNameAware接口,Spring会调用其setBeanName方法,将Bean在容器中的名称传递给它。
- 如果Bean实现了BeanFactoryAware接口,Spring会调用其setBeanFactory方法,将当前的BeanFactory传递给它。
- 如果Bean实现了ApplicationContextAware接口,Spring会调用其setApplicationContext方法,将当前的ApplicationContext传递给它。
- BeanPostProcessor前置处理:
- Spring会调用所有注册的BeanPostProcessor的postProcessBeforeInitialization方法,允许开发者在Bean初始化之前对其进行额外的处理。
- 初始化Bean:
- 如果Bean实现了InitializingBean接口,Spring会调用其afterPropertiesSet方法进行初始化。
- 如果Bean定义中指定了自定义初始化方法,Spring会在上述步骤完成后调用该方法。
- BeanPostProcessor后置处理:
- Spring会调用所有注册的BeanPostProcessor的postProcessAfterInitialization方法,对Bean进行后置处理。
五、容器缓存阶段
- 缓存Bean:
- 完成初始化后,Bean会被缓存到IoC容器中,此时Bean已经处于可用状态,可以被开发者使用。
六、使用阶段
- Bean的使用:
- 开发者可以通过IoC容器获取并使用Bean,执行其业务逻辑。
七、销毁阶段
- 销毁Bean:
- 当Spring容器关闭时,会对所有的Singleton Bean进行销毁。
- 如果Bean实现了DisposableBean接口,Spring会调用其destroy方法进行销毁。
- 如果Bean定义中指定了自定义销毁方法,Spring会在销毁过程中调用该方法。
综上所述,Spring Bean的生命周期执行流程涵盖了从创建前准备、创建实例、依赖注入、初始化、容器缓存、使用到销毁的整个过程。Spring提供了丰富的接口和扩展点,允许开发者在生命周期的各个阶段进行自定义操作,从而实现更灵活和可扩展的Bean管理。