Spring&SpringBoot
SpringBoot设计的目的是用来简化Spring应用的初始搭建以及开发过程
Spring缺点
- 依赖设置繁琐
开发项目时需要我们一个一个的导入依赖,十分繁琐,且当项目导入大量依赖之后,可能会存在依赖版本冲突的问题 - 配置繁琐
需要写各种配置类活配置文件
SpringBoot的核心功能和优点
- 起步依赖
我们不需要一个一个的配置依赖,只需要选择合适的启动依赖即可 - 自动配置
- 辅助功能(内置Tomcat 服务器)
依赖导入(parent&starter)
- parent
- 作用:定义若干依赖管理,避免多个依赖使用相同技术时出现依赖版本冲突
- 原理:
spring-boot-starter-parent
,继承自spring-boot-dependencies
,其中的<dependencyManagement>
标签中定义了若干依赖,这其实是对引用坐标的依赖管理,并不是实际导入坐标。 - 注意,maven只可继承一次,不使用继承
spring-boot-starter-parent
的方法也一样可以进行版本管理。阿里云的starter创建工程时直接导入了spring-boot-dependencies
,效果一样。
<!-- 继承parent来进行版本管理 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
</parent>
<!-- 导入dependencies来进行版本管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
-
starter
- 作用:定义使用某种技术时对于依赖的固定搭配方式,可以理解成是某种技术的一个解决方案。使用
starter
可以帮助开发者减少依赖配置。 - 原理: 针对某种技术预先定义了其所需要的依赖坐标
- 实际开发中,先找这个技术对应的
starter
,如果有就直接导入,无需指定版本,若没有,手写坐标即可。
- 作用:定义使用某种技术时对于依赖的固定搭配方式,可以理解成是某种技术的一个解决方案。使用
-
总结:
parent
定义了许多依赖的版本号,依赖的版本控制交由其统一管理,以减少依赖冲突。而starter
是一个坐标中定义了一系列坐标,简化了依赖配置,实现快速配置。
引导类&内嵌Tomcat
- 引导类
- Spring Boot提供引导类来启动程序
- Spring Boot工程启动后创建并初始化Spring容器
- 引导类必须声明一个注解
@SpringBootApplication
@SpringBootApplication
public class Demo2Application {
public static void main(String[] args) {
SpringApplication.run(Demo2Application.class, args);
}
}
-
内嵌Tomcat
- 在
spring-boot-starter-web
启动依赖中定义了spring-boot-starter-tomcat
。 - 运行原理:Tomcat是使用Java开发的软件,运行起来也是一个对象。内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理,而具体运行的是
tomcat-embed-core
即tomcat内嵌核心。
- 在
-
更换内嵌服务器
- SpringBoot提供了三款内置服务器,tomcat(默认),jetty以及undertow。
- 更换之前需要先将Tomcat排除掉,然后再导入对应服务器坐标
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
</dependencies>