SpringBoot基础系列文章
SpringBoot基础(一):快速入门
目录
- 一、SpringBoot简介
- 二、快速入门
- 三、SpringBoot核心组件
- 1、parent
- 1.1、spring-boot-starter-parent
- 1.2、spring-boot-dependencies
- 2、starter
- 2.1、spring-boot-starter-web
- 2.2、spring-boot-starter
- 2.3、parent和starter的区别
- 3、启动类
- 4、内嵌Tomcat运行原理
一、SpringBoot简介
- SpringBoot可以
简单
、快速
地创建一个独立的、生产级别的Spring应用(说明:SpringBoot底层是Spring) - 大多数SpringBoot应用只需要编写
少量配置
即可快速整合Spring平台以及第三方技术
SpringBoot特性
- 快速创建独立Spring应用
- 以前的SSM框架,需要导包、写配置、启动运行
- 直接嵌入Tomcat、Jetty or Undertow,不再需要部署war包
- 提供可选的场景启动器(starter),简化应用整合
- 为每一种场景准备一个依赖,如:spring-boot-starter-web、mybatis-plus-boot-starter
- 以前需要导包,控制版本
- 按需自动配置Spring以及第三方库
- 约定大于配置:每个场景都有很多基本的默认配置
总结:简化整合、配置、开发、部署
二、快速入门
pom.xml
- 所有springboot项目pom文件都必须继承
spring-boot-starter-parent
- web场景启动器
spring-boot-starter-web
包含了web开发的所有依赖
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 所有springboot项目都必须继承自 spring-boot-starter-parent --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.11</version><relativePath/></parent><artifactId>springboot</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- web开发的场景启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><!-- SpringBoot应用打包插件mvn clean package把项目打成可执行的jar包java -jar demo.jar启动项目--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
核心启动类
// 这是一个SpringBoot应用
@SpringBootApplication
public class SpringBootMainApplication {public static void main(String[] args) {SpringApplication.run(SpringBootMainApplication.class,args);}
}
Controller测试类
@RestController
public class HelloController {@GetMapping("/hello")public String hello(){return "Hello,Spring Boot !";}
}
访问路径:http://localhost:8080/hello
三、SpringBoot核心组件
1、parent
之前传统框架对依赖版本的选择具有固定的搭配格式
,并且这些依赖版本的选择还不能乱搭配。于是SpringBoot将所有的技术版本
的常见使用方案(parent版本)
都整理出来,以后开发者直接使用它提供的方案(parent版本)即可,就不用担心冲突问题了。
1.1、spring-boot-starter-parent
parent版本
即为SpringBoot项目pom文件的父工程坐标
- parent有很多版本,每个parent版本包含了几百种技术的
版本号
- parent只负责进行
版本管理
,不会导入坐标
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.11</version>
</parent>
spring-boot-starter-parent
坐标内容
- 核心内容
spring-boot-dependencies
依赖管理,下面讲 - 设置默认的
java编译版本
以及编码方式
- 管理
打包插件的版本
,这也是SpringBoot的pom文件中打包插件不用写版本号的原因
1.2、spring-boot-dependencies
- 这里将常用的框架之间适配的版本号已配置好
- 只管理依赖版本,而不导入依赖
<dependencyManagement>
依赖管理标签内,则表示只是引入申明,只有在子pom
中使用<dependencies>(不用写版本号)
依赖才会导入
- 如果想
导入依赖
则需要在SpringBoot的pom文件中配置,如导入activemq
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-amqp</artifactId>
</dependency>
- 如果想要
修改版本号
,可以在SpringBoot的pom文件中配置
<properties><activemq.version>5.7.0</activemq.version>
</properties># 或者直接修改版本,maven就近原则<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-amqp</artifactId><version>5.7.0</version>
</dependency>
2、starter
starter
定义了使用某种技术时对于依赖的固定搭配格式
,可以帮助开发者减少依赖配置- 官方提供的场景:命名为:
spring-boot-starter-*
- 第三方提供场景:命名为:
*-spring-boot-starter
- 官方提供的场景:命名为:
2.1、spring-boot-starter-web
- 项目中的pom.xml没有写SpringMVC的坐标,而只添加
spring-boot-starter-web
的依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
- spring-boot-starter-web中定义了若干个
具体依赖的坐标
- 简单看下
spring-boot-starter-json
和spring-boot-starter-tomcat
的内容
2.2、spring-boot-starter
- 这里会导入spring的依赖
- 核心依赖
spring-boot-autoconfigure
的jar
包 - 这些类会通过条件组件给spring容器导入bean对象(如:导入redis依赖,就会导入StringRedisTemplate对象,服务中我们就可以直接注入使用了)
- 具体内容后面源码章节详解
2.3、parent和starter的区别
- parent是定义了几百种依赖版本号
- 以前写依赖需要自己手工控制版本,现在由SpringBoot统一管理,这样就不存在版本冲突了
- 用来减少依赖冲突的
- starter是一个坐标中定了若干个坐标
- 以前写多个的,现在写一个
- 用来减少依赖配置的书写量
3、启动类
- Spring程序运行的基础是需要创建自己的
Spring容器对象(IoC容器)
- 将所有的对象交给Spring的容器管理,也就是一个一个的Bean
- 当前这个类运行后就会产生一个Spring容器对象,通过容器对象可以直接操作Bean
- 默认扫描包为启动类所在
包及其子包
@SpringBootApplication
public class SpringBootMainApplication {public static void main(String[] args) {//获取ioc容器ConfigurableApplicationContext context = SpringApplication.run(SpringBootMainApplication.class, args);//获取组件User user = context.getBean(User.class);System.out.println(user);}
}
4、内嵌Tomcat运行原理
- 从上面说到的内嵌tomcat的
spring-boot-starter-tomcat
说起
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><version>2.7.11</version><scope>compile</scope>
</dependency>
- 这里导入了很多tomcat相关依赖
从上面说到的spring-boot-autoconfigure
的jar
包里的配置类,找到ServletWebServerFactoryAutoConfiguration
ServletWeb服务器工厂自动配置。
Tomcat
类来自于tomcat-embed-core-9.0.74.jar
,由于导入这个jar,才能创建Tomcat容器工厂类,后续才能创建Tomcat容器并启动。
- 这里简单截图说下tomcat启动流程
创建Tomcat
启动Tomcat
挂起Tomcat,这也就是启动类main函数不会执行结束的原因
- 这里只是简单介绍下,后续关于tomcat的源码章节详解