springboot启动过程总结:1.SpringBoot启动过程分为两步:①引入spring应用,然后创建spring应用②运行spring应用-创建SpringApplication-保存一些信息。-确定当前应用程序的类型。ServletorResponsiveProgramming-bootstrappers:InitialBootstrapper(List):到spring.factories中找到org.springframework.boot.Bootstrapper-找到ApplicationContextInitializer;去spring.factories找到ApplicationContextInitializer-封装到List>initializers-寻找ApplicationListener应用监听器。到spring.factories中找到ApplicationListener——封装成List>listeners简单来说,应用创建的过程就是把一些关键的主键放到spring.factories文件中,供我们读取信息并保存提前到springapplication里面——运行SpringApplication——StopWatchstoplistener——记录应用程序的启动时间——创建bootstrap上下文(Context环境)createBootstrapContext()——获取之前保存的所有bootstrapper,并一一执行它们的initialize()完成引导上下文环境的设置-将当前应用程序置于无头模式。java.awt.headless(headless表示自力更生,不依赖他人)-获取所有RunListeners(运行中的监听器)【为了便于所有Listener感知事件】-getSpringFactoriesInstances去spring.factories中寻找SpringApplicationRunListener。-遍历所有SpringApplicationRunListener调用的起始方法;-相当于通知所有感兴趣的人系统正在启动,项目正在启动。(即告诉我这个项目正在启动)-保存命令行参数;ApplicationArguments——准备环境,调用prepareEnvironment();-返回或创建一个基本的环境信息对象。StandardServletEnvironment——配置环境信息对象。-读取所有配置源的配置属性值。-绑定环境信息-遍历每一个监听器,调用listener.environmentPrepared();通知所有监听器当前环境已经准备好-创建IOC容器(调用createApplicationContext())-根据项目类型(Servlet)创建容器,-将创建当前AnnotationConfigServletWebServerApplicationContext-准备ApplicationContextIOC容器调用的基本信息prepareContext()——保存环境信息——IOC容器的后处理过程。-应用初始化器:applyInitializers;-遍历所有ApplicationContextInitializers。Callinitialize..初始化ioc容器的扩展功能——遍历所有监听器,调用contextPrepared。实际上EventPublishRunListenr:通知所有监听器contextPrepared容器的上下文准备好了——所有监听器调用contextLoaded。通知所有监听器contextLoaded;容器的上下文已经加载-刷新IOC容器。refreshContext——创建容器中的所有组件——容器刷新后要做的工作(调用afterRefresh())——遍历所有监听器,调用listeners.started(context);notifyalllistenersthatthestartedprojecthasstarted(notifylistenersAnotherthingisdone)所以这里可以访问8080——调用allrunners;(调用callRunners())-获取容器中的ApplicationRunner-获取容器中的CommandLineRunner-合并所有runner并按照@Order排序-遍历所有runner。调用run方法-如果`准备环境,调用prepareEnvironment()到这里`有异常,-调用Listener的failed-调用所有监听器的running方法,无异常listeners.running(context);通知所有正在运行的监听器项目已经进入运行状态——有问题就运行。继续通知失败。调用失败的所有监听器;通知所有失败的监听器当前项目失败。只要看到这个getSpringFactoriesInstances()方法,就会去spring.factories文件里找东西。springboot启动过程中涉及到的组件有:ApplicationContextInitializer、ApplicationListener、SpringApplicationRunListener、ApplicationRunner、CommandLineRunner,我们可以通过自定义组件来监控springboot的整个启动过程,然后在某个时刻做一些事情