• 3、SpringBoot执行原理


    一、自动配置:

    pom.xml

    • Spring-boot-dependencies:核心依赖在父工程中
    • 我们在写或者引入springboot依赖的时候,不需要指定版本,因为有这些版本仓库

    启动器

    <!--启动器-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>
    • 启动器:说白了就是Springboot的启动场景

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

    • springboot会将所有的功能场景,都变成一个个的启动器

    • 我们要使用什么功能,就值需要找到对应的启动器starter

    主程序

    //标注这个类是一个springboot的应用
    @SpringBootApplication
    public class SpringbootStudyApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootStudyApplication.class, args);
        }
    }

    注解

    //springboot的配置
    @SpringBootConfiguration
    
        //spring配置类
      @Configuration 
    
        //说明这也是一个spring的组件
      @Component    
    
    //自动配置
    @EnableAutoConfiguration
    
        //自动配置包
        @AutoConfigurationPackage 
    
        //自动配置    
            @Import(AutoConfigurationPackages.Registrar.class)
    
        //自动配置导入选择
        @Import(AutoConfigurationImportSelector.class)
    
    //获取所有的配置
    List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);

    获取候选的配置

    protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
      List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),
                                                                           getBeanClassLoader());
      Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you "
                      + "are using a custom packaging, make sure that file is correct.");
      return configurations;
    }

    META-INF/spring.factories.

    Springboot所有自动配置都是在启动的时候扫描并加载:spring.factories所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的strater,就有了对应的启动器,有了启动器,我们自动装配就会生效,然后配置成功

    1. springboot在启动的时候,从类路径下 /META-INF/spring.factories.获取指定的值;

    1. 将这些自动配置的类导入容器,自动配置就会生效,帮我们进行自动配置
    2. 以前我们需要手动配置的东西,现在Springboot帮我们做了
    3. 整合javaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure包下
    4. 它会把所有需要导入的组件,以类名的方式返回,这些组件就会添加到容器
    5. 容器中也会存在XXXXautoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景所需要的所有组件,并自动配置,@Configuration,JavaConfig
    6. 有了自动配置类,免去了我们自己编写配置文件的步骤

    启动原理:

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

    最初以为就是运行了一个main方法,没想到却开启了一个服务;

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

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

  • 相关阅读:
    函数地址经典基础C++笔试题(附答案)
    类型事务修改 mysql 表类型 实际测试可执行
    ARM7,ARM9有哪些区别
    I2C,SPI,UART总线的区别详解
    I²C
    AnyWhere——面向设备的编程模式
    Linux设备驱动编程之内存与I/O操作
    http://www.ibm.com/developerworks/cn/linux/lcnspidermonkey/index.html
    PCI Express总线接口板的设计与实现
    armfans文章搜集
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/14318132.html
Copyright © 2020-2023  润新知