Spring初始化流程

Spring IOC初始化流程

首先通过new ApplicationContext()触发IOC容器初始化,ApplicationContext的refresh方法里完成容器初始化。具体过程

  • 定位。通过Resource定位BeanDefinition,BeanDefinition抽象了对bean的定义,比如bean的信息,依赖关系等。
    1. FileSystemXmlApplicationContext里调用refresh()方法初始化IoC容器。
    2. 在refresh()方法里调用obtainFreshBeanFactory()里面的refreshBeanFactory()来完成BeanDefinition的定位。
    3. refreshBeanFactory()中是通过loadBeanDefinitions()来完成BeanDefinition的定位,具体由AbstractBeanDefinitionReader里的loadBeanDefinitions()来实现。
  • 载入。根据BeanDefinition在Ioc容器中创建(实例化)bean。
    1. 执行BeanPostProcessors进行后置处理
  • 注册。把bean放入IOC容器中,底层是个Map。
  • 事件。注册事件监听器 registerListenersfinishRefresh后发布事件
SpringBoot初始化流程

@SpringBootApplication标注的启动类开始

  • springboot启动应用程序之前,会创建一些初始化对象(如ApplicationContextInitializer)和监听器。通过loadSpringFactories()读取自动配置,创建好初始化对象后,listeners.starting();启动监听器
  • 创建上下文。createApplicationContext()、创建工厂对象
  • 刷新上下文。refreshContext()、配置工厂对象和bean。此时通过BeanPostProcessors实现AOP逻辑注入,得到代理对象,注册到IOC容器。
  • 发布通知:通知上下文刷新完成。上下文初始化完成之后,startWebServer()启动tomcat服务器,程序启动完成。
posted @ 2021-04-21 23:34  i%2  阅读(233)  评论(0)    收藏  举报