SpringBoot(1) 核心特性
2023-10-30 15:01:22 # Backend # SpringBoot

本文使用的 SpringBoot 版本为 3.0.5, 最小需要 jdk17

快速入门

创建项目

1
2
3
4
5
6
<!-- 所有springboot项目都必须继承自 spring-boot-starter-parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.5</version>
</parent>

打包

官方文档

1
2
3
4
5
6
7
8
9
<!-- SpringBoot应用打包插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

使用 mvn package 打包后,通过 java -jar 即可运行

简化配置

通过书写配置文件 application.properties/yml 完成配置

依赖管理机制

  • 导入场景启动器的依赖时不需要声明版本号
    • 原因:每个boot项目都有一个父项目spring-boot-starter-parent
      • spring-boot-starter-parent的父项目是spring-boot-dependencies(版本仲裁中心)
    • 版本仲裁中心声明了所有常见的jar的依赖版本
  • 自定义版本号:利用maven的就近原则

    • 直接在当前项目properties标签中声明父项目用的版本属性的key

      • 例如: <mysql.version>5.1.47</mysql.version>
    • 直接在导入依赖的时候声明版本

  • 第三方的jar包自行声明版本

img

自动配置机制

  • 默认的包扫描规则

    • SpringBoot只会扫描主程序所在的包及其下面的子包,自动的component-scan功能
    • 自定义扫描路径

      • @SpringBootApplication(scanBasePackages = "com.atguigu")
      • @ComponentScan("com.atguigu") 直接指定扫描的路径
  • 配置默认值

    • 配置文件的所有配置项是和某个类的对象值进行一一绑定的。
    • 绑定了配置文件中每一项值的类:属性配置类
    • 比如:

      • ServerProperties绑定了所有Tomcat服务器有关的配置
      • MultipartProperties绑定了所有文件上传相关的配置
      • 官方文档
  • 按需加载自动配置

    • 场景启动器除了会导入相关功能依赖,导入一个spring-boot-starter,是所有starterstarter
    • spring-boot-starter导入了一个包 spring-boot-autoconfigure。包中囊括了所有场景的AutoConfiguration自动配置类
    • 虽然全场景的自动配置都在 spring-boot-autoconfigure这个包,但并不是全都开启的

      • 导入哪个场景就开启哪个自动配置

img

组件注册

  • @Configuration, @SpringBootConfiguration: 配置类, 使用上无区别

  • @Bean, @Scope: 用于注册 bean 以及声明该 bean 的作用域, 通过修改函数名或者@Bean的值可设置 bean 的名称(组件名默认是函数名)

  • @Import: 对第三方包中的组件进行注册时,除了可以在函数上使用 @Bean, 也可以在配置类上使用 @Import(xxx.class)(组件名默认为全类名)

Web开发

数据访问

基础特性

核心原理