1. SpringBoot简介及简单使用
1.1 SpringBoot介绍
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
总结:
Spring Boot是全新的框架,用来简化Spring的搭建和开发过程,例如:依赖的引入
作用:
SpringBoot的推出 让程序员更加专注于业务处理, SpringBoot是学习微服务框架基石
Spring和SpringBoot关系 :
SpringBoot是Spring的工具API框架
1.2 SpringBoot 入门案例
1.2.1 安装SpringBoot插件:Spring Assistant
1).IDEA破解版本,自带SpringBoot插件 所以无需安装
2).IDEA社区版本.需要手动安装一个SpringBoot插件.
目的:安装这个插件的目的是为了能够创建Springboot的项目
1.2.2 创建SpringBoot项目
1)
2)
注:两种方式都可以创建Spring Boot工程
3)
注:
- Spring Boot是一个框架,能够帮你管理一些常用的依赖,之前我们学习Maven时,存在一些弊端,我们不知道使用哪个依赖包,这对新手很不友好,而SpringBoot的诞生,解决了这个问题,我们只需要在上面的页面中勾选自己需要的业务功能,例如:mysql、Spring Web等
- Spring Boot是Spring的工具API框架,相当于把Spring的一些功能进行了封装,而每个版本可能都会有更新,因此我们选择Springboot的版本时,使用较新较稳定的即可
4)创建完成后的结构如下:
5)执行main方法检查运行是否正常
6)如图所示表示程序正常
1.3 关于SpringBoot项目pom.xml文件说明
1.3.1 parent标签
<!--1.parent标签 父级工程
SpringBoot将现有主流的框架都进行了整合,
在内部完成了jar包的依赖的配置.如果用户需要,则只添加某些核心包
那么所有的依赖都会按照规则自动的下载.
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
请点击此处了解更多SpringBoot中parent的作用!点我!
1.3.2 依赖配置项
<!--Springboot通过启动项的方法的 进行jar包文件的加载.
同时这些功能中的配置项 SpringBoot有些也会自动的完成.
无特殊的要求 无需手动的配置.
开箱即用的思想!!!!
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
说明:
以前我们创建Spring项目时,为了让注解和一些jar包生效,我们会写一个配置类,而在SpringBoot中,大多数情况下,我们只要添加了spring-boot-starter-XXX,这个启动项依赖,我们就不需要写Spring的配置类了,除非是一些功能特别多的包。
例如:spring-boot-starter-web,除了会给我们进行对应jar包的引入之外,还会为我们进行一些常用配置
开箱即用的思想:也就是拿到了无需过多的配置,直接使用即可
1.3.3 build标签
<!--
关于build标签说明
1.build标签它是maven工程的要求.
2.作用: 完成项目的打包/发布等一系列的功能.
3.该标签的使用是SpringBoot必须的,如果没有该标签则项目无法使用jar包运行
-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
1.3.4 关于jar包依赖传递性
1)问题说明:
当引入webjar包时, 其他jar包文件如何依赖的?
2)原理说明:
例子:
1.A.jar ----> B.jar
2.B.jar -----> C.jar
maven原理说明:
1.当maven解析pom.xml文件时,会根据maven坐标查找指定的jar包文件.
2.当jar包加载完成之后,由于该项目也是maven工程,所以maven工具会解析该项目的pom.xml文件
根据POM.xml文件 再次加载依赖包 直到所有的jar包依赖加载完成
1.3.5 拓展
1)maven 如何保证jar包依赖安全性(了解)
算法: SHA1
SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
1.1)关于hash问题:
1.2)核心原理说明:
判断传递前后的sha1算法是否相同,如果相同则标识传输正常,
如果不同,则文件有问题.
2.SpringBoot的学习
2.1 配置文件说明
2.1.1 关于properties文件说明
缺点:假设我们将来需要引入大量第三方配置,如图所示,会造成文件的重复冗余,且不便于管理。
2.2.2 关于yml文件说明
说明: 虽然pro文件是SpringBoot默认配置文件.但是其中编码格式比较繁琐,不便于查看.所以在项目中一般使用YML文件.
2.2 测试案例:@Value属性赋值
需求:
在YML配置文件中编辑key=value结构,之后利用注解为属性赋值.
2.2.1 编辑YML配置文件
#YML文件语法
## 1.YML数据结构k-v结构
## 2.k与v 需要使用 :"空格" 连接
## 3.YMl配置文件有父子级关系 所以注意缩进项的位置
server:
port: 8090 #配置端口
servlet: #web项目发布路径
context-path: / #/表示根目录
#定义dept属性值 YML文件默认支持UTF-8
dept:
id: 100
name: 财务部
2.2.2 为Dept对象赋值
2.2.3 编辑springBoot测试类
补充:
@SpringBootTest注解在执行测试方法时,会启动Spring容器,类似于之前的new AnnotationConfigApplicationContext(SpringConfig.class);
2.2.4 拓展
1)注意事项: 以后写代码都必须写到主启动类的同包及子包中
类似于包扫描我们之前是componentScan(“com.jt”),主启动类的位置相当于是这个包扫描的路径
2.3 利用properties文件为属性赋值
说明:
前面我们使用yml配置文件为属性赋值,这样会暴露出一些问题,一是将来如果有大量的业务数据,那么yml文件会显得很冗余,二是如果将业务数据和一些配置信息放在一起容易造成结构的混乱,不利于管理,因此,我们需要引入pro文件来存放业务数据
2.3.1 编辑pro文件
2.3.2 实现自动赋值
2.4 lombok插件
2.4.1 安装插件
2.4.2 添加jar包
<!--引入插件lombok 自动的set/get/构造方法插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
2.4.3 lombok的背景说明
1)编辑测试类
package com.jt;
import com.jt.pojo.Dept;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest //在执行测试方法时自动的启动Spring容器
class SpringbootDemo1ApplicationTests {
//当容器启动成功之后,SpringBoot负责将对象进行注入
@Autowired
private Dept dept;
@Test
void contextLoads() {
Dept dept = new Dept();
dept.setId(101);
dept.setName("Rose");
System.out.println(dept);
}
}
问题引入:
上诉测试方法中,set方法重复添加了多次,如果将来对象名发生改变,例如 dept 改为 abc,那么下面所有的dept.setXXX都要更改为abc.setXXX,牵一发动全身,很繁琐,有没有什么办法呢?通过修改set方法的返回值来优化!
2)编辑Dept类
public class Dept {
//spel表达式
@Value("${dept.id}")
private Integer id;
@Value("${dept.name}")
private String name;
public Dept setId(Integer id) {
this.id = id;
//返回当前对象
return this;
}
public Dept setName(String name) {
this.name = name;
//返回当前对象
return this;
}
}
通过这种方式,我们可以发现set方法可以被无限的套用!
3)优化测试类
package com.jt;
import com.jt.pojo.Dept;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest //在执行测试方法时自动的启动Spring容器
class SpringbootDemo1ApplicationTests {
//当容器启动成功之后,SpringBoot负责将对象进行注入
@Autowired
private Dept dept;
@Test
void contextLoads() {
Dept dept = new Dept();
//链式加载
dept.setId(101).setName("Rose");
System.out.println(dept);
}
}
说明:
我们不难发现,这样写节省了大量的空间,并且如果变量名修改了,我们也只需要修改开头即可,非常简洁!
但是另一个问题是我们又要重写大量的set方法,有没有什么办法呢?
lombok的注解便诞生了!
只需要添加:@Data、@Accessors(chain = true) 开启链式加载即可!