zoukankan      html  css  js  c++  java
  • 02、SpringBoot运行原理探究

    pom文件

    父项目

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    它的父项目为:
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath>../../spring-boot-dependencies</relativePath>
    </parent>
    他来真正管理Spring Boot应用里面的所有依赖版本
    
    • spring-boot-dependencies:核心依赖在父工程中。
    • 我们在引入一些SpringBoot依赖的时候,不需要指定版本,就是因为有这些版本仓库。

    启动器

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    spring-boot-starter:spring-boot场景启动器;帮我们导入了web模块正常运行所依赖的组件;

    比如spring-boot-starter-web,它就会帮我们自动导入web环境所有的依赖。

    Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter 相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器。

    主程序类,主入口类

    //@SpringBootApplication:标注这个类是一个SpringBoot的应用
    @SpringBootApplication
    public class Springboot01HelloworldApplication {
        public static void main(String[] args) {
            //将SpringBoot应用启动
        	SpringApplication.run(Springboot01HelloworldApplication.class, args);
        }
    }
    

    @SpringBootApplication:Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;

    • @SpringBootConfiguration:SpringBoot的配置类。标注在某个类上,表示这是一个SpringBoot的配置类;

      • @Configuration:Spring配置类。配置类 ----- 配置文件;配置类也是容器中的一个组件;@Component

        • @Component:说明这是一个Spring的组件
      • @EnableAutoConfiguration:开启自动配置功能;以前我们需要配置的东西,Spring Boot帮我们自动配置;

        • @AutoConfigurationPackage:自动配置包

        • @Import({Registrar.class}):自动配置包注册
          @Import({AutoConfigurationImportSelector.class}):自动配置导入选择。Spring的底层注解@Import,给容器中导入一个组件;导入的组件由AutoConfigurationPackages.Registrar.class;

          将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;

        • EnableAutoConfigurationImportSelector:导入哪些组件的选择器;

        将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;

        SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);

        Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作。

        J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-2.2.6.RELEASE.jar;

    结论:

    1. SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
    2. 将这些值作为自动配置类导入容器 , 自动配置类就生效 , 帮我们进行自动配置工作;
    3. 整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包中;
    4. 它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件 , 并配置好这些组件 ;
    5. 有了自动配置类 , 免去了我们手动编写配置注入功能组件等的工作。

    SpringApplication.run分析

    分析该方法主要分两部分,一部分是SpringApplication的实例化,二是run方法的执行;

    SpringApplication类,这个类主要做了以下四件事情:

    1. 推断应用的类型是普通的项目还是Web项目,
    2. 查找并加载所有可用初始化器,设 置到initializers属性中,
    3. 找出所有的应用程序监听器,设置到listeners属性中,
    4. 推断并设置main方法的定义类,找到运行的主类。

    run()方法流程分析

    run()方法

    coydone的博客
  • 相关阅读:
    494 Target Sum 目标和
    493 Reverse Pairs 翻转对
    492 Construct the Rectangle 构建矩形
    491 Increasing Subsequences 递增子序列
    488 Zuma Game 祖玛游戏
    486 Predict the Winner 预测赢家
    485 Max Consecutive Ones 最大连续1的个数
    483 Smallest Good Base
    Django Form组件
    Django Auth组件
  • 原文地址:https://www.cnblogs.com/coydone/p/13784784.html
Copyright © 2011-2022 走看看