SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来 简化 Spring 应用的初始搭建以及开发过程。
Spring 程序缺点:依赖设置繁琐、配置繁琐
SpringBoot 程序优点:起步依赖(简化依赖配置)、自动配置(简化常用工程相关配置)、辅助功能(内置服务器…)
一、入门案例
入门案例选用 springboot 的版本为 2.5.4,案例工程目录结构:
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.axy</groupId>
<artifactId>springboot_01_01_quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_01_01_quickstart</name>
<description>springboot_01_01_quickstart</description>
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
SpringbootQuickstartApplication.java:
@SpringBootApplication
public class SpringbootQuickstartApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootQuickstartApplication.class, args);
}
}
二、SpringBoot 的 parent
下面通过以下例子,说明parent依赖管理的作用:
工程 A 与工程 B 所使用的依赖坐标都要使用下面的三个坐标,因此在各自的pom文件中都要做如下引用:
因此,可以将坐标抽取出来,放到一个单独的 pom 文件中,工程 A 和工程 B 在各自的文件中引用该 pom 文件:
但是以上的方式还可以再继续做优化,就是将 pom 版本与坐标做集中管理。
左边 pom 文件将版本信息集中起来管理,配置成 maven 的属性,右边 pom 文件的坐标引用左边的 maven 属性:
左边的版本信息可以再继续扩展,将所有能够用到的版本信息都配置在左侧 pom 文件:
好处:日后不用担心坐标冲突的事情,springboot 做了大的版本统一,确保当前版本管理下的包在一起使用不会冲突。
日后开发,变成以下步骤:
SpringBoot 中是如何做版本管理的呢?
现假设 pom 文件中导入没有指定版本的 javax-servlet-api
坐标,刷新 pom 文件后,自动指定引入 javax
包的版本为 4.0.1:
原因在于,pom 中继承了 spring-boot-starter-parent
,而 spring-boot-starter-parent
中又继承了 spring-boot-dependencies
,其里面集中做了 版本管理。并且,后文又通过 <dependencyManagement>…</dependencyManagement>
做了一系列的 坐标依赖管理。那么日后,当引入其中的坐标的时候,就不用再指定版本了。
注:<dependencyManagement>
用于做依赖管理,当 pom 文件继承该模块后不会引入依赖管理中的相应包,只有当 pom 文件引用该坐标后,才会引用相关联的包。并且在不指定版本的情况下,会直接使用版本管理坐标中的版本信息。
补充:基于阿里云创建的项目的版本管理
基于阿里云创建的项目,如何做版本管理?
阿里云创建的项目,直接引入了 spring-boot-dependencies
,效果是一样的。
阶段总结:
① 开发 SpringBoot 程序要继承 spring-boot-starter-parent
② spring-boot-starter-parent 中定义了若干个依赖管理(严格来讲是 spring-boot-dependencies)
③ 继承 parent 模块可以避免多个依赖使用相同技术时出现依赖版本冲突
④ 继承 parent 的形式也可以采用引入依赖的形式实现效果
三、SpringBoot 的 starter
SpringBoot 中的 starter 定义了当前项目使用的很多依赖坐标,以达到减少依赖配置的目的。
如:pom 文件引入了 spring-boot-starter-web,通过依赖传递来引入很多个其他的 starter,其他的 starter 又引入了 具体的坐标…
四、SpringBoot 的引导类
SpringBoot 的引导类是 Boot 工程的执行入口,运行 main 方法就可以启动项目。项目运行后初始化 Spring 容器,ComponentScan 注解默认会扫描引导类 所在包及其子包,将有相应的对象加载 bean。
如:当前 User 类都 在 引导类所在包 axy 的下面,则将目标类加载成 bean:
当前 User 类 不在 引导类所在包 axy 的下面,则不会将目标类加载成 bean:
参考链接:黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)