MENU

SpringBoot的学习(长期更新!)

SringBoot的概述

  SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。

SpringBoot的特点

  1. 为基于Spring的开发提供更快的入门体验
  2. 开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求
  3. 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等

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

主程序

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

}

注解

    @springBootConfiguration : springboot的配置
        @Configuration:spring配置类
        @Component:说明这也是一个spring的组件
      
    @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(this.getSpringFactoriesLoaderFactoryClass(), this.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 :自动配置的核心文件
l2otumon.png

Properties properties = PropertiesLoaderutils.LoadProperties(resource);
所有资源加载到配置类中!

{card-default label="结论" width=""}
结论: springboot 所有自动配置都是在启动的时候扫描并加载: spring.factories 所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的 start ,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功!

  1. springboot 在启动的时候,从类路径下/META-INF/l spring.factories 获取指定的值;
  2. 将这些自动配置的类导入容器,自动配置就会生效,帮我进行自动配置!
  3. 以前我们需要自动配置的东西,现在 springboot 帮我们做了!
  4. 整合 javaEE ,解决方案和自动配置的东西都在 spring-boot-autoconfigure-2.2.0.RELEASE.jar 这个包下
  5. 它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器;
  6. 容器中也会存在非常多的 xxAutoConfiguration 的文件(@Bean),就是这些类给容器中导入了这个场景需要的所有组件;并自动配置, @Configuration , JavaConfig!
  7. 有了自动配置类,免去了我们手动编写配置文件的工作!|

{/card-default}

SpringBoot-依赖管理特性

父项目做依赖管理

依赖管理
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
</parent>

上面项目的父项目如下:
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.4.RELEASE</version>
</parent>

它几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制
  1. 开发导入starter场景启动器
    见到很多 spring-boot-starter-就某种场景
    只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
    更多SpringBoot所有支持的场景
    见到的 *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。

    所有场景启动器最底层的依赖
    <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter</artifactId>
     <version>2.3.4.RELEASE</version>
     <scope>compile</scope>
    </dependency>
  2. 无需关注版本号,自动版本仲裁
    引入依赖默认都可以不写版本
    引入非版本仲裁的jar,要写版本号。
    可以修改默认版本号
  3. 看spring-boot-dependencies里面规定当前依赖的版本 用的 key。
    在当前项目里面重写配置,如下面的代码。

    <properties>
     <mysql.version>5.1.43</mysql.version>
    </properties>
Last Modified: June 16, 2022
Leave a Comment