Spring Boot启动过程

简介: Spring Boot启动过程

SpringApplication run方法解析

public ConfigurableApplicationContext run(String... args) {
    StopWatch stopWatch = new StopWatch();
    stopWatch.start();
    ConfigurableApplicationContext context = null;
    FailureAnalyzers analyzers = null;
    configureHeadlessProperty();
                //1.创建了应用的监听器SpringApplicationRunListeners并开始监听
    SpringApplicationRunListeners listeners = getRunListeners(args);
    listeners.starting();
    try {
                //2.创建⼀个DefaultApplicationArguments对象,它持有着args参数,就是main函数传进来的参数.调⽤prepareEnvironment⽅法
      ApplicationArguments applicationArguments = new DefaultApplicationArguments(
          args);
               //3.加载SpringBoot配置环境(ConfigurableEnvironment),如果是通过web容器发布,会加载StandardEnvironment
      ConfigurableEnvironment environment = prepareEnvironment(listeners,
          applicationArguments);
               //4.打印banner
      Banner printedBanner = printBanner(environment);
               //5.创建run方法的返回对象:ConfigurableApplicationContext(应用配置上下文)
      context = createApplicationContext();
      analyzers = new FailureAnalyzers(context);
              //6.回到run方法内,prepareContext方法将listeners、environment、applicationArguments、banner等重
              //要组件与上下文对象关联
      prepareContext(context, environment, listeners, applicationArguments,
          printedBanner);
              //7.接下来的refreshContext(context)方法(初始化方法如下)将是实现spring-boot-starter-*(mybatis、
              //redis等)自动化配置的关键,包括spring.factories的加载,bean的实例化等核心工作。
      refreshContext(context);
      afterRefresh(context, applicationArguments);
      listeners.finished(context, null);
      stopWatch.stop();
      return context;
    }
    catch (Throwable ex) {
      handleRunFailure(context, listeners, analyzers, ex);
      throw new IllegalStateException(ex);
    }
  }

 

Servlet启动原理

----------------------------------创建IOC容器---------------------------

1 spring boot 应用启动运行run方法

2  createApplicationContext():创建IOC容器,如果是web应用则创建AnnotationConfigEmbeddedWebApplacation的IOC容器,如果不是,则创建AnnotationConfigApplication的IOC容器

3  refreshContext(context)->refresh(context)->调用父类的refresh()的方法刷新刚才创建的IOC容器

(并初始化容器,创建容器每一个组件)

----------------------------------创建Servlet容器---------------------------

4  抽象父类AbstractApplicationContext类的子类EmbeddedWebApplicationContext的onRefresh方法

5  在createEmbeddedServletContainer会获取嵌入式Servlet容器工厂,由容器工厂创建Servlet

6  从IOC容器中获取Servlet容器工厂

7  使用Servlet容器工厂获取嵌入式Servlet容器,具体使用哪一个容器工厂看配置环境依赖

8  上述创建过程  首先启动IOC容器,接着启动嵌入式Servlet容器,接着将IOC容器中剩下没有创建的对象获取出来,比如自己创建的controller

 


目录
打赏
0
0
0
0
25
分享
相关文章
SpringBoot的启动过程
启动详解 SpringBoot的启动分为两个部分: 构造SpringApplication 执行run方法 构造SpringApplication 我们先来整体看看: 加入我们当前启动类如下: 可以发现大致做了以下几件事: 设置BeanDefinition的主源 推断应用类型 设置ApplicationContext 初始化器 设置监听器 推断著主启动类 接下来我们详细的看看每一个步骤: 第一步:记录 BeanDefinition 源 大家知道我们的Spring容器刚开始内部的BeanFactory是空的,它要从各个源头去寻找BeanDefinition, 这些源有可能来自
106 1
手写模拟Spring Boot启动过程功能
【11月更文挑战第19天】Spring Boot自推出以来,因其简化了Spring应用的初始搭建和开发过程,迅速成为Java企业级应用开发的首选框架之一。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,帮助读者深入理解其工作机制。
66 3
深入Spring Boot启动过程:揭秘设计模式与代码优化秘籍
深入Spring Boot启动过程:揭秘设计模式与代码优化秘籍
深入理解Spring Boot的启动过程
深入理解Spring Boot的启动过程
springboot 启动原理、启动过程、启动机制的介绍
【5月更文挑战第13天】Spring Boot 是一种基于 Java 的框架,用于创建独立的、生产级别的 Spring 应用程序。它的主要目标是简化 Spring 应用的初始搭建和开发过程,同时提供一系列大型项目常见的非功能性特征(如嵌入式服务器、安全性、度量、健康检查和外部化配置)。
623 3
如何在SpringBoot启动过程中,进行自定义操作?
如何在SpringBoot启动过程中,进行自定义操作?
88 0
Spring5源码(15)-IoC容器启动过程简析及XmlBeanFactory初始化
Spring5源码(15)-IoC容器启动过程简析及XmlBeanFactory初始化
81 1
SpringBoot(一):springboot应用程序启动过程核心分析
说起**springboot**大家很容易想到的就是**自动装配**、**约定大于配置**这个特点,的确这是springboot相比较于普通的**spring** web项目最大的亮点。
99 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等