Skip to content

SpringBean初始化流程

首先看下完整的类图 1745409224487

bean的初始化流程:

  1. 读取xml文件所有bean的定义,转为BeanDefinition
  2. 使用反射初始化Bean
  3. 按照setXxx方法设置属性值,属性中若有引用类型,则需要先初始化引用类型的Bean
    • 其中细节:为了解决循环依赖问题,会将初始化的Bean(属性还未设值),放到earlySingletonObjects中供其他Bean引用
  4. 注意getBean的核心方法,先从容器中获取Bean实例,如果没有再从毛坯实例中获取,都没有再创建实例并注册(放到容器中)
  5. 在注册Bean后,执行一些钩子方法,postProcessBeforeInitialization-->initMethod-->postProcessAfterInitialization
    • 在postProcessBeforeInitialization中,处理了@Autowired注解注入依赖的逻辑,该逻辑就是解析被注解的属性,找到该属性的bean并反射设值

总结,IOC容器的核心:

  • 识别配置文件中的Bean定义,创建Bean, 并放入容器进行管理
  • 支持配置方式或是注解方式进行Bean的依赖注入
  • 构建了BeanFactory体系
  • 容器应用上下文和事件发布

若有收获,就点个赞吧