Spring Boot超详细分析启动流程

Spring Boot是基于Spring框架的一种快速开发框架,它通过自动化配置和约定大于配置的方式,可以快速的搭建一个Web应用。

Spring Boot启动流程主要分为三个阶段:准备阶段、上下文创建阶段、启动阶段。

准备阶段

Spring Boot准备阶段主要是读取应用程序的配置文件,获取配置文件中自定义的配置内容,并为后续的启动做好一些准备工作。准备阶段分为以下两个过程:

1. 加载基本的Spring Framework设置

在这一步中,Spring Boot会加载基本的Spring Framework设置,并创建并设置AnnotationConfigApplicationContext或者XmlWebApplicationContext的实例对象。

public static void main(String[] args) {
  ApplicationContext ctx = SpringApplication.run(Application.class, args);
}

在Spring Boot应用程序中,我们可以通过调用“SpringApplication.run()”方法来启动应用程序,并返回一个上下文对象,该上下文对象为获取Spring Bean的方式提供了支持。

2. 加载配置文件

Spring Boot默认会使用application.properties或者application.yml作为应用程序的配置文件。在启动时Spring Boot会加载这些配置文件,根据不同的配置文件的前缀来创建一个Environment实例对象,并将其设置到Spring的上下文环境中。

server:
  port: 8080

logging:
  level:
    com:
      example:
        acme: DEBUG

上下文创建阶段

在准备阶段完成后,Spring Boot将进入上下文创建阶段。在这个阶段中,Spring Boot会根据不同的配置来创建和管理Spring上下文。该阶段可以分为以下三个过程:

1. 创建BeanFactory

在创建BeanFactory时,Spring Boot将会实例化一个默认的BeanFactory。并在该BeanFactory中注册一些常用的Bean,比如包扫描机制等。

public static void main(String[] args) {
  new SpringApplicationBuilder(Application.class)
    .web(WebApplicationType.SERVLET)
    .run(args);
}

通过调用SpringApplicationBuilder的run方法创建ApplicationContext实例时,如果我们指定WebApplicationType为SERVLET,那么就会创建一个org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext(ServletContext)对象。如果我们指定WebApplicationType为REACTIVE,那么就会创建一个org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext(ApplicationContext)对象。

2. 加载ApplicationContextInitializers并对ApplicationContext进行初始化

ApplicationContextInitializer是Spring提供的一个扩展点,它可以在ApplicationContext创建之前或之后对ApplicationContext进行一些预处理。Spring Boot中,主要为了满足用户的自定义扩展需求,Spring Boot提供了一些默认的ApplicationContextInitializer实现类,比如设置系统属性、设置环境变量等。

public static void main(String[] args) {
  new SpringApplicationBuilder(Application.class)
    .web(WebApplicationType.SERVLET)
    .initializers(new MyApplicationContextInitializer())
    .run(args);
}

public class MyApplicationContextInitializer implements ApplicationContextInitializer<GenericApplicationContext> {
  @Override
  public void initialize(GenericApplicationContext applicationContext) {
    //自定义初始化逻辑
  }
}

3. 装载应用程序主类

在装载应用程序主类时,Spring Boot会读取应用程序主类中的注解信息,例如:@Configuration、@ComponentScan等,在根据这些注解信息依次依赖注入应用程序中定义的各个Bean,完成程序的部署和配置。

@SpringBootApplication
public class Application {
  public static void main(String[] args) {
   SpringApplication.run(Application.class, args);
  }
}

在这个例子中,通过 @SpringBootApplication注解表示整个项目是一个SpringBoot应用程序,它会自动扫描包下所有@Component或@Configuration注解的类,并把这些类注入应用程序上下文。

启动阶段

在创建ApplicationContext之后,Spring Boot将会进入启动鉴定阶段。主要任务是启动服役服务或者Web容器。

1. 创建Web服务器

如果项目有WebApplicationType.SERVLET或WebApplicationType.REACTIVE的标记,那么就会启动该Web类型对应的Web服务器。

@SpringBootApplication
public class Application {
  public static void main(String[] args) {
   new SpringApplicationBuilder(Application.class)
    .web(WebApplicationType.SERVLET)
    .run(args);
  }
}

2. 启动服务器

启动服务器。

示例1

以下是一个使用Spring Boot启动HTTP服务器的示例代码。

@SpringBootApplication
public class App {
  public static void main(String[] args) {
    SpringApplication.run(App.class, args);
  }
}

@RestController
@RequestMapping("/hello")
public class HelloController {
  @GetMapping("/{user}")
  public String hello(@PathVariable("user") String user) {
    return "hello, " + user;
  }
}

示例2

以下是一个使用Spring Boot启动FTP服务器的示例代码。

@SpringBootApplication
public class App {
  public static void main(String[] args) {
    SpringApplication.run(App.class, args);
  }
}

@Configuration
@EnableFtpServer
public class FtpServerConfig {
  @Autowired
  private FtpServerProperties ftpServerProperties;

  @Bean
  public FtpServerFactory getFtpServerFactory() {
    FtpServerFactory serverFactory = new FtpServerFactory();
    ListenerFactory listenerFactory = new ListenerFactory();
    listenerFactory.setPort(ftpServerProperties.getPort());
    listenerFactory.setServerAddress(ftpServerProperties.getIpAddress());
    serverFactory.addListener("default", listenerFactory.createListener());
    return serverFactory;
  }
}

以上就是Spring Boot超详细分析启动流程的完整攻略。涵盖了准备阶段、上下文创建阶段和启动阶段的详细解析,并给出了两个具体的示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot超详细分析启动流程 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 使用java编程从0到1实现一个简单计算器

    下面是使用java编程从0到1实现一个简单计算器的完整攻略: 1. 准备工作 首先,我们需要准备好开发所需的工具和环境: JDK (Java Development Kit):用于编译和运行Java代码,下载地址可见Oracle官网 IDE (Integrated Development Environment):用于编写Java代码的开发环境,有很多不同的…

    Java 2023年5月18日
    00
  • java 按行读取文件并输出到控制台的方法

    如果你想在Java中按行读取文件并输出到控制台,可以使用Java提供的标准库中的常用类 – BufferedReader。下面是完整攻略: 使用FileReader类创建一个FileReader对象,来读取指定路径下的文件。 FileReader fileReader = new FileReader("file_path"); 创建一个…

    Java 2023年5月26日
    00
  • Spring Data JPA调用存储过程实例代码

    下面是关于Spring Data JPA调用存储过程的完整攻略。 什么是Spring Data JPA Spring Data JPA是Spring应用程序中使用JPA(Java Persistence API)的一种方法。它的主要目的是简化以前需要执行多个步骤的JPA存储库的实现,例如将存储库实现转换为Spring组件,以及省略常规的存储库查询和操作。使用…

    Java 2023年5月20日
    00
  • SpringBoot整合BootStrap实战

    完整攻略: 创建SpringBoot项目 首先,我们需要创建一个SpringBoot项目。打开IDEA,点击“New Project”,选择Spring Initializr,填写项目信息,勾选“Web”和“Thymeleaf”作为依赖,点击“Next”,填写项目的Group和Artifact信息,点击“Finish”创建项目。 引入BootStrap依赖 …

    Java 2023年5月15日
    00
  • springBoot集成Elasticsearch 报错 Health check failed的解决

    下面是针对“springBoot集成Elasticsearch 报错 Health check failed的解决”的完整攻略: 问题背景 在使用SpringBoot集成Elasticsearch时,可能会遇到一些报错,其中之一就是“Health check failed”的报错。这个报错通常会出现在应用程序的启动过程中,导致无法正常启动应用程序。那么这个问…

    Java 2023年5月19日
    00
  • vue.js数据响应式原理解析

    Vue.js数据响应式原理解析 Vue.js是一个极易上手,功能强大的Javascript框架,它的核心就是数据响应式系统。在Vue.js中,我们可以轻松的绑定数据和视图,而这一切都得益于Vue.js的数据响应式系统。在本篇文章中,我们将深入剖析Vue.js数据响应式原理。 数据响应式系统란? Vue.js的数据响应式系统简单来说,就是一种将ViewMode…

    Java 2023年5月23日
    00
  • SpringBoot复杂参数应用详细讲解

    SpringBoot复杂参数应用详细讲解 在SpringBoot中,我们可以很方便地绑定和处理各种类型的请求参数,包括简单的字符串和数字,以及复杂的对象和集合类型。在本文中,我们将详细介绍如何处理复杂的请求参数,包括Bean对象、List和Map集合类型等。 1. Bean对象参数 对于Bean对象类型的参数,我们可以通过在控制器方法中直接声明该对象的参数来…

    Java 2023年5月15日
    00
  • Ubuntu14.04 安装配置Tomcat7教程

    下面是Ubuntu 14.04安装配置Tomcat7的完整攻略: 1. 安装JAVA Tomcat是基于Java的,因此我们需要先安装JDK。 可以按照以下步骤安装OpenJDK: 更新软件包列表: sudo apt-get update 安装OpenJDK: sudo apt-get install openjdk-7-jdk 安装完成后,通过以下命令检查…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部