Spring Bean 的生命周期整体流程

227 阅读1分钟

整体流程图

QQ截图20220814162907.png

Spring 容器启动进行初始化工作


  • 初始化一些类:bean 工厂、Javaconfig 读取器-BeanDefinitionReader、bean扫描器-BeanDefinitionScanner - 使用 JavaConfig 读取器读取 JavaConfig ,封装成BeanDefinition

进入 refresh()


beanFactory 填充一些属性

  • 调用:this.postProcessBeanFactory(beanFactory);

bean工厂的扩展点

  • 调用:this.postProcessBeanFactory(beanFactory);

扫描bean


  • 调用 this.invokeBeanFactoryPostProcessors(beanFactory);
  • 使用 BeanDefinitionScanner 扫描@ComponentScan注解对应路径下的类、@Bean、@Import 注解的类,封装成BeanDefinition 并放入Map

归类 beanPostProcessor的实现类注册到Bean工厂


  • 调用this.registerBeanPostProcessors(beanFactory)
  • 将实现了beanPostProcessor的类,放入bean工厂
    • 分为三类:
      • 1-排序的;2-有优先级的;3-什么都没有的

创建bean


  • 调用:this.finishBeanFactoryInitialization(beanFactory);
  • 判断是否需要合并bean
  • 判断bean如果是beanFactory的,就调用BeanFactory的getObject() 生成想要生成的对象。
  • 如果bean是非懒加载的单例bean就调用getBean生成bean - 开始bean 的创建的生命周期

销毁bean