提示:文章先作为初版,等后续时间充足后,补充更深的内容
Spring容器的启动流程
一、流程
当启动Spring容器时,会按照以下步骤进行:
扫描并注册Bean定义:Spring容器会扫描指定的包或目录,查找带有特定注解(如@Component、@Service、@Repository等)的类。它会创建对应的BeanDefinition对象,包含了Bean的元数据信息,并将这些BeanDefinition对象存储在一个Map中。
预处理Bean定义:在注册Bean定义后,Spring容器会对Bean定义进行预处理操作。这包括合并父子类的BeanDefinition,解析属性占位符,处理自动装配等。
实例化非懒加载的单例Bean:Spring容器会遍历所有非懒加载的单例BeanDefinition,并根据BeanDefinition创建相应的Bean实例。这涉及到实例化Bean、属性填充和依赖注入等操作。
初始化Bean:在单例Bean实例化后,Spring容器会调用各个Bean的初始化方法。这可以包括自定义的初始化逻辑,如初始化数据库连接、加载配置文件等。还可以执行BeanPostProcessor的前置初始化方法。
注册BeanPostProcessor:Spring容器会注册实现了BeanPostProcessor接口的Bean后处理器。这些后处理器可以在Bean实例化和初始化的过程中对Bean进行增强,如AOP代理、属性填充等。注册后处理器之后,会执行BeanPostProcessor的后置初始化方法。
完成启动过程:当所有非懒加载的单例Bean都被实例化、初始化完成后,Spring容器的启动过程结束。此时,可以发布容器启动事件,通知相关的监听器。
二、注意事项
上述流程中的细节和执行顺序可能会因为Spring的版本和配置方式的不同而有所差异。在实际开发中,还可以通过扩展点如BeanFactoryPostProcessor、@Import注解等来定制和影响Spring容器的启动流程,满足特定的需求。