SpringBoot简介
1.什么是SpringBoot
SpringBoot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
SpringBoot所具备的特征有:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
(2)内嵌Tomcat或Jetty等Servlet容器;
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查和外部化配置;
(6)绝对没有代码生成,不需要XML配置。
2.SpringBoot快速入门
1.创建SpringBoot工程的四种方式
- 基于Idea创建SpringBoot工程
- 基于官网创建SpringBoot工程
- 基于阿里云创建SpringBoot工程
- 手工创建Maven工程修改为SpringBoot工程(一般不用)
①基于Idea创建SpringBoot工程
需要对idea进行联网,其实和从Spring官网创建性质一样
②基于官网创建SpringBoot工程
步骤:
- 打开SpringBoot官网(https://start.spring.io/),选择Quickstart Your Project
- 创建工程,并保存项目
- 解压项目,通过IDE导入项目
③基于阿里云创建SpringBoot工程
基于阿里云创建项目,地址:https://start.aliyun.com
注意事项:
- 阿里云提供的坐标版本较低,如果需要使用高版本,进入工程后手工切换SpringBoot版本
- 阿里云提供的工程模板与Spring官网提供的工程模板略有不同
步骤:
- 选择start来源为自定义URL
- 输入阿里云start地址
- 创建项目
④手工创建SpringBoot工程
手工导入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 http://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>
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_01_03_quickstart</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
2.编写controller
package com.sangyu.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author sangYu
* @date 2023/3/23
*/
@RestController
@RequestMapping("/books")
public class MyController01 {
@GetMapping
public String test01(){
System.out.println("SpringBoot.......");
return "SpringBoot.......";
}
}
3.运行
package com.sangyu;
import com.sangyu.controller.MyController01;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class SpringBoot01Application {
public static void main(String[] args) {
SpringApplication.run(SpringBoot01Application.class, args);
// MyController01 bean = run.getBean(MyController01.class);
// System.out.println("bean========>" + bean);
// //会自动扫描注解,使当前包下的注解生效,创造bean,寻找bean
// User bean1 = run.getBean(User.class);
// System.out.println("bean========>" + bean1);
}
}
成功跑起来了
3.入门程序工作原理
1.parent(仅定义,未使用)
开发SpringBoot程序要继承spring-boot-starter-parent
spring-boot-starter-parent中定义了若干个依赖管理
继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
继承parent的形式也可以采用引入依赖的形式实现效果
2.starter(解决配置问题)
1.开发SpringBoot程序需要导入坐标时通常导入对应的starter
2. 每个不同的starter根据功能不同,通常包含多个依赖坐标
3. 使用starter可以实现快速配置的效果,达到简化配置的目的
- starter
- SpringBoot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的
- parent
- 所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
- spring-boot-starter-parent各版本间存在着诸多坐标版本不同
- 实际开发
- 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供,除非SpringBoot未提供对应版本V
- 如发生坐标错误,再指定Version**(要小心版本冲突)**
3.引导类
1.SpringBoot工程提供引导类用来启动程序
2. SpringBoot工程启动后创建并初始化Spring容器
- SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目 (未启动Web服务器)
- SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean
4.辅助功能(内嵌tomcat)
1. 内嵌Tomcat服务器是SpringBoot辅助功能之一
2. 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理
3. 变更内嵌服务器思想是去除现有服务器,添加全新的服务器
使用maven依赖管理变更起步依赖项
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--web起步依赖环境中,排除Tomcat起步依赖-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加Jetty起步依赖,版本由SpringBoot的starter控制-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
</dependencies>