前言
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".
Spring Boot 能快速创建出生产级别的Spring应用
-
Create stand-alone Spring applications
- 创建独立Spring应用
-
Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
- 内嵌web服务器,无需再配置tomcat
-
Provide opinionated 'starter' dependencies to simplify your build configuration
- starter场景启动器自动配置相关依赖,简化构建配置
-
Automatically configure Spring and 3rd party libraries whenever possible
- 自动配置Spring以及第三方功能
-
Provide production-ready features such as metrics, health checks, and externalized configuration
- 提供生产级别的监控、健康检查及外部化配置
-
Absolutely no code generation and no requirement for XML configuration
- 无代码生成、无需编写XML
boot:起始
SpringBoot是整合Spring技术栈的一站式框架,是简化Spring技术栈的快速开发脚手架,在spring boot项目中可以很方便地使用Spring生态的服务,类似vue脚手架
依赖管理和版本仲裁
依赖管理
父项目一般做依赖管理
<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>
版本仲裁
- 引入默认依赖可以不写版本号,子项目添加父项目存在的依赖可以不写版本号
- 引入非版本仲裁的jar,要写版本号。
以swagger为例,父项目中规定依赖版本
<properties>
<java.version>1.8</java.version>
<swagger.version>2.7.0</swagger.version>
</properties>
<dependencyManagement>
<dependencies>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<!--swagger ui-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
子项目可以不写版本号
<dependencies>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
</dependencies>
修改默认版本号
- 默认依赖也可以修改成自己想要的版本
<!--
1、查看spring-boot-dependencies里面规定当前依赖的版本
2、可以在当前项目里面重写配置
-->
<properties>
<mysql.version>5.1.43</mysql.version>
</properties>
自动配置
starter场景启动器
在项目pom.xml
文件中会看到很多boot-starter
结尾的依赖名称,只要引入starter
,这个场景的所有常规依赖springboot都自动引入 ,例如mybatis-plus
<!--mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
点开查看,发现使用mybatis-plus需要的依赖都在,不再需要自己手动添加,这就是springboot的便捷之处
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.0.5</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.0.1.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.0.1.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.0.1.RELEASE</version>
<scope>optional</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
autoconfigure
每个场景启动器都会有autoconfigure
配置,这也是为什么springboot会自动配置依赖的
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.0.1.RELEASE</version>
<scope>compile</scope>
</dependency>
默认包结构(重要)
- 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来,这也是为什么启动类必须直接放在项目模块下,与
controller层
、service层
同级- 无需以前的包扫描配置
- 想要改变扫描路径,
@SpringBootApplication(scanBasePackages="")
- 或者
@ComponentScan("")
指定扫描路径
@SpringBootApplication
//等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan()
浅谈springboot自动配置原理
配置的默认值
- 各种配置都拥有默认值,例如tomcat端口默认8080
默认配置最终都是映射到某个类上 - 配置文件的值最终会绑定每个类上,这个类会在容器中创建对象
按需配置
按需加载所有自动配置项
- 非常多的starter
- 引入了场景之后,这个场景的自动配置才会开启
- SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面