当前位置:   article > 正文

【黑马程序员】SpringBoot2学习笔记_黑马springboot2笔记

黑马springboot2笔记

1、SpringBoot的前菜

1.1 发展沿革

2013年,Pivotal团队开始研发SpringBoot。

2014年4月,发布全新开源的轻量级框架的第一个SpringBoot版本

1.2 特点

SpringBoot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。针对原始的Spring程序制作的两个方面进行了简化:

  • Spring程序缺点

  • 依赖设置繁琐

  • 以前写Spring程序,使用的技术都要自己一个一个的写,现在不需要了,如果做过原始SpringMVC程序的小伙伴应该知道,写SpringMVC程序,最基础的spring-web和spring-webmvc这两个坐标时必须的,就这还不包含你用json啊等等这些坐标,现在呢?一个坐标搞定面

  • 配置繁琐

  • 以前写配置类或者配置文件,然后用什么东西就要自己写加载bean这些东西,现在呢?什么都没写,照样能用

再来看看前面提出的两个问题,已经有答案了,都简化了,都不用写了,这就是SpringBoot给我们带来的好处。这些简化操作在SpringBoot中有专业的用语,也是SpringBoot程序的核心功能及优点:

  • 起步依赖(简化依赖配置)

  • 依赖配置的书写简化就是靠这个起步依赖达成的

  • 自动配置(简化常用工程相关配置)

  • 配置过于繁琐,使用自动配置就可以做响应的简化,但是内部还是很复杂的,后面具体展开说

  • 辅助功能(内置服务器,……)

  • 除了上面的功能,其实SpringBoot程序还有其他的一些优势,比如我们没有配置Tomcat服务器,但是能正常运行,这是SpringBoot程序的一个可以感知到的功能,也是SpringBoot的辅助功能之一。一个辅助功能都能做的这么6,太牛了

废话不多说开始学习springboot

2、SpringBoot基础篇

基础篇目标上手,能够使用springboot搭建基于springboot的web项目进行开发

  • SpringBoot快速入门

  • SpringBoot基础配置

  • 基于SpringBoot整合SSMP

2.1 快速上手SpringBoot

SpringBoot技术由Pivotal团队研发制作,功能的话简单概括就是加速Spring程序的开发,这个加速要从如下两个方面来说

  • Spring程序初始搭建过程

  • Spring程序的开发过程

通过上面两个方面的定位,我们可以产生两个模糊的概念:

  1. SpringBoot开发团队认为原始的Spring程序初始搭建的时候可能有些繁琐,这个过程是可以简化的,那原始的Spring程序初始搭建过程都包含哪些东西了呢?为什么觉得繁琐呢?最基本的Spring程序至少有一个配置文件或配置类,用来描述Spring的配置信息,莫非这个文件都可以不写?此外现在企业级开发使用Spring大部分情况下是做web开发,如果做web开发的话,还要在加载web环境时加载时加载指定的spring配置,这都是最基本的需求了,不写的话怎么知道加载哪个配置文件/配置类呢?那换了SpringBoot技术以后呢,这些还要写吗?

  1. SpringBoot开发团队认为原始的Spring程序开发的过程也有些繁琐,这个过程仍然可以简化。开发过程无外乎使用什么技术,导入对应的jar包(或坐标)然后将这个技术的核心对象交给Spring容器管理,也就是配置成Spring容器管控的bean就可以了。这都是基本操作啊,难道这些东西SpringBoot也能帮我们简化?

如果对Spring程序的基础开发不太懂的小伙伴,可以去看一下我的ssm学习笔记(更新中!!!其实是拖更中)SSM框架之SSM学习笔记,下面的内容学习需要具备Spring技术的知识,硬着头皮学不下去的。

2.1.1 SpringBoot入门程序制作

由于本人用的idea为2021版所以与课程有些与出入但是大致不差 如果想要博主的idea版本可私信我

下面使用SpringBoot技术快速构建一个SpringMVC的程序,通过这个过程体会简化二字的含义

步骤①:创建新模块,选择Spring Initializr,并配置模块相关基础信息

注意:由于版本不同idea操作略有不同

特别关注:第3步点击Next时,Idea需要联网状态才可以进入到后面那一页,如果不能正常联网,就无法正确到达右面那个设置页了,会一直联网转转转

特别关注:第5步选择java版本和你计算机上安装的JDK版本匹配即可,但是最低要求为JDK8或以上版本,推荐使用8或11

步骤②:选择当前模块需要使用的技术集

关注:此处选择的SpringBoot的版本使用默认的就可以了,需要说一点,SpringBoot的版本升级速度很快,可能昨天创建工程的时候默认版本是2.3.12,今天再创建工程默认版本就变成2.3.5了,差别不大,无需过于纠结,回头可以到配置文件中修改对应的版本

步骤③:开发控制器类

  1. //Rest模式  至于Rest模式后续会有介绍
  2. @RestController
  3. @RequestMapping("/books")
  4. public class BookController {
  5. @GetMapping
  6. public String getById(){
  7. System.out.println("springboot is running...");
  8. return "springboot is running...";
  9. }
  10. }

入门案例制作的SpringMVC的控制器基于Rest风格开发,当然此处使用原始格式制作SpringMVC的程序也是没有问题的,上例中的@RestController与@GetMapping注解是基于Restful开发的典型注解

关注:做到这里SpringBoot程序的最基础的开发已经做完了,现在就可以正常的运行Spring程序了。

步骤④:运行自动生成的Application类

访问路径:    http://localhost:8080/books
  • pom.xml

这是maven的配置文件,描述了当前工程构建时相应的配置信息

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6.     <!--类似继承父类 继承父工程-->
  7. <groupId>org.springframework.boot</groupId>
  8.         <!--springboot的核心组件-->
  9. <artifactId>spring-boot-starter-parent</artifactId>
  10. <version>2.5.4</version>
  11. </parent>
  12. <groupId>com.example</groupId>
  13. <artifactId>demo</artifactId>
  14. <version>0.0.1-SNAPSHOT</version>
  15. <dependencies>
  16. <dependency>
  17. <groupId>org.springframework.boot</groupId>
  18. <artifactId>spring-boot-starter-web</artifactId>
  19.             <!--springboot的web模块-->
  20. </dependency>
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-test</artifactId>
  24.             <!--spring的测试模块-->
  25. <scope>test</scope>
  26. </dependency>
  27. </dependencies>
  28. </project>
  • Application类

  1. @SpringBootApplication
  2. public class Application {
  3. public static void main(String[] args) {
  4. SpringApplication.run(Application.class, args);
  5. }
  6. }

这个类功能很简单,就一句代码,前面运行程序就是运行的这个类

到这里我们可以大胆推测一下,如果上面这两个文件没有的话,SpringBoot肯定没法玩,看来核心就是这两个文件了。由于是制作第一个SpringBoot程序,先不要关注这两个文件的功能,后面详细讲解内部工作流程。

通过上面的制作,我们不难发现,SpringBoot程序简直太好写了,几乎什么都没写,功能就有了,这也是SpringBoot技术为什么现在这么火的原因,和Spirng程序相比,SpringBoot程序在开发的过程中各个层面均具有优势

类配置文件

Spring

SpringBoot

pom文件中的坐标

手工添加

勾选添加

web3.0配置类

手工制作

Spring/SpringMVC配置类

手工制作

控制器

手工制作

手工制作

一句话总结一下就是能少写就少写能不写就不写,这就是SpringBoot技术给我们带来的好处。

总结

  1. 开发SpringBoot程序可以根据向导进行联网快速制作

  1. SpringBoot程序需要基于JDK8以上版本进行制作

  1. SpringBoot程序中需要使用何种功能通过勾选选择技术,也可以手工添加对应的要使用的技术

  1. 运行SpringBoot程序通过运行Application程序入口进行

2023年2月7日星期二1:03:26  会慢慢更新 加油兄弟们

2.1.2 SpringBoot入门程序制作(二)

由于某些不可抗拒的原因国内进入spring的官方网站会有点慢

这里推荐修改位阿里云的地址 创建程序会快

阿里为了便于自己开发使用,因此在依赖坐标中添加了一些阿里相关的技术,也是为了推广自己的技术吧,所以在依赖选择列表中,你有了更多的选择

阿里云提供的地址更符合国内开发者的使用习惯,里面有一些SpringBoot官网上没有给出的坐标,大家可以好好看一看。

注意:阿里云提供的工程创建地址初始化完毕后和实用SpringBoot官网创建出来的工程略有区别。主要是在配置文件的形式上有区别。

总结

  1. 选择start来源为自定义URL

  1. 输入阿里云start地址

  1. 创建项目

2.1.3 SpringBoot入门程序制作(三)

离线创建springboot

步骤①:创建工程时,选择手工创建Maven工程

步骤②:参照标准SpringBoot工程的pom文件,书写自己的pom文件即可

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <parent>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-parent</artifactId>
  9. <version>2.5.4</version>
  10. </parent>
  11. <groupId>com.itheima</groupId>
  12. <artifactId>springboot_01_04_quickstart</artifactId>
  13. <version>1.0-SNAPSHOT</version>
  14. <properties>
  15. <maven.compiler.source>8</maven.compiler.source>
  16. <maven.compiler.target>8</maven.compiler.target>
  17. </properties>
  18. <dependencies>
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-web</artifactId>
  22. </dependency>
  23. </dependencies>
  24. </project>

用什么写什么,不用的都可以不写。当然,现在小伙伴们可能还不知道用什么和不用什么,最简单的就是复制粘贴比如我现在这段话除了这句话都是cv

步骤③:之前运行SpringBoot工程需要一个类,这个缺不了,需要自己手写一个,建议按照之前的目录结构来创建,类名可以自定义但必须要加上@SpringBootApplication注解

  1. @SpringBootApplication
  2. public class Application {
  3. public static void main(String[] args) {
  4. SpringApplication.run(<Application.class);
  5. }
  6. }

步骤④:下面就可以自己创建一个Controller测试一下是否能用了,和之前没有差别

温馨提示

如果你的计算机上从来没有创建成功过SpringBoot工程,自然也就没有下载过SpringBoot对应的坐标,那用手写创建的方式在不联网的情况下肯定该是不能用的。所谓手写,其实就是自己写别人帮你生成的东西,但是引用的坐标对应的资源必须保障maven仓库里面有才行,如果没有,还是要去下载的

总结

  1. 创建普通Maven工程

  1. 继承spring-boot-starter-parent

  1. 添加依赖spring-boot-starter-web

  1. 制作引导类Application

2.2 SpringBoot基础配置

这个篇章介绍如何修改默认配置

2.2.1 属性配置

SpringBoot通过配置文件application.properties就可以修改默认的配置,那咱们就先找个简单的配置下手,当前访问tomcat的默认端口是8080,好熟悉的味道,但是不便于书写,我们先改成80,通过这个操作来熟悉一下SpringBoot的配置格式是什么样的

改端口,写port。当你输入port后,神奇的事情就发生了,这玩意儿带提示,太好了

server.port=80

根据提示敲回车,输入80端口,搞定

下面就可以直接运行程序,测试效果了。

我们惊奇的发现SpringBoot这玩意儿狠啊,以前修改端口在哪里改?tomcat服务器的配置文件中改,现在呢?SpringBoot专用的配置文件中改,是不是意味着以后所有的配置都可以写在这一个文件中呢?是的,简化开发者配置的书写位置,集中管理。妙啊,妈妈再也不用担心我找不到配置文件了。

我们得到如下三个信息

  1. SpringBoot程序可以在application.properties文件中进行属性配置

  1. application.properties文件中只要输入要配置的属性关键字就可以根据提示进行设置

  1. SpringBoot将配置信息集中在一个文件中写,不管你是服务器的配置,还是数据库的配置,总之都写在一起,逃离一个项目十几种配置文件格式的尴尬局面

总结

SpringBoot默认配置文件是application.properties

2.2.2 配置文件分类

现在已经能够进行SpringBoot相关的配置了,但是properties格式的配置写起来总是觉得看着不舒服,所以就期望存在一种书写起来更简便的配置格式提供给开发者使用。有吗?还真有,SpringBoot除了支持properties格式的配置文件,还支持另外两种格式的配置文件。分别如下:

  • properties格式

  • yml格式

  • yaml格式

一看到全新的文件格式,各位小伙伴肯定想,这下又要学习新的语法格式了。怎么说呢?从知识角度来说,要学,从开发角度来说,不用学。为什么呢?因为SpringBoot的配置在Idea工具下有提示啊,跟着提示走就行了。下面列举三种不同文件格式配置相同的属性范例,先了解一下

  • application.properties(properties格式)

server.port=80
  • application.yml(yml格式)

  1. server:
  2. port: 81
  • application.yaml(yaml格式)

  1. server:
  2. port: 82

仔细看会发现yml格式和yaml格式除了文件名后缀不一样,格式完全一样,是这样的,yml和yaml文件格式就是一模一样的,只是文件后缀不同,所以可以合并成一种格式来看。以后基本上都是用yml格式的,本课程后面的所有知识都是基于yml格式来制作的,以后在企业开发过程中用这个格式的机会也最多,一定要重点掌握。

总结

SpringBoot提供了3种配置文件的格式

  • properties(传统格式/默认格式)

  • yml(主流格式)

  • yaml

另外配置文件的优先级为properties(最高)> yml > yaml(最低)

不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留

2.2.3 yaml文件

SpringBoot的配置以后主要使用yml结尾的这种文件格式,并且在书写时可以通过提示的形式加载正确的格式。但是这种文件还是有严格的书写格式要求的。下面就来说一下具体的语法格式。

YAML(YAML Ain't Markup Language),一种数据序列化格式。具有容易阅读、容易与脚本语言交互、以数据为核心,重数据轻格式的特点。常见的文件扩展名有两种:

  • .yml格式(主流)

  • .yaml格式

对于文件自身在书写时,具有严格的语法格式要求,具体如下:

  1. 大小写敏感

  1. 属性层级关系使用多行描述,每行结尾使用冒号结束

  1. 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)

  1. 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

  1. #号 表示注释

核心的一条规则要记住,数据前面要加空格与冒号隔开

下面为常见的数据书写格式,熟悉一下

  1. boolean: TRUE #TRUE,true,True,FALSE,false,False均可
  2. float: 3.14 #6.8523015e+5 #支持科学计数法
  3. int: 123 #0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制
  4. null: ~ #使用~表示null
  5. string: HelloWorld    #字符串可以直接书写
  6. string2: "Hello World"    #可以使用双引号包裹特殊字符
  7. date: 2018-02-17    #日期必须使用yyyy-MM-dd格式
  8. datetime: 2018-02-17T15:02:31+08:00   #时间和日期之间使用T连接,最后使用+代表时区

此外,yaml格式中也可以表示数组,在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔

  1. subject:
  2. - Java
  3. - 前端
  4. - 大数据
  5. enterprise:
  6. name: itcast
  7. age: 16
  8. subject:
  9. - Java
  10. - 前端
  11. - 大数据
  12. likes: [王者荣耀,刺激战场] #数组书写缩略格式
  13. users: #对象数组格式一
  14. - name: Tom
  15. age: 4
  16. - name: Jerry
  17. age: 5
  18. users: #对象数组格式二
  19. -
  20. name: Tom
  21. age: 4
  22. -
  23. name: Jerry
  24. age: 5
  25. users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ] #对象数组缩略格式

总结

  1. yaml语法规则

  • 大小写敏感

  • 属性层级关系使用多行描述,每行结尾使用冒号结束

  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)

  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

  • #号 表示注释

  1. 注意属性名冒号后面与数据之间有一个空格

  1. 字面值、对象数据格式、数组数据格式

2.2.4 yaml数据读取

对于yaml文件中的数据,其实你就可以想象成这就是一个小型的数据库,里面保存有若干数据,每个数据都有一个独立的名字,如果你想读取里面的数据,肯定是支持的,下面就介绍3种读取数据的方式

读取单一数据

yaml中保存的单个数据,可以使用Spring中的注解直接读取,使用@Value可以读取单个数据,属性名引用方式:${一级属性名.二级属性名……}

记得使用@Value注解时,要将该注入写在某一个指定的Spring管控的bean的属性名上方。现在就可以读取到对应的单一数据行了(就是要把改类加入ioc容器中)

总结

  1. 使用@Value配合SpEL读取单个数据

  1. 如果数据存在多层级,依次书写层级名称即可

读取全部数据

读取单一数据可以解决读取数据的问题,但是如果定义的数据量过大,这么一个一个书写肯定会累死人的,SpringBoot提供了一个对象,能够把所有的数据都封装到这一个对象中,这个对象叫象Environment,使用自动装配注解可以将所有的yaml数据封装到这个对象中

数据封装到了Environment对象中,获取属性时,通过Environment的接口操作进行,具体方法时getProperties(String),参数填写属性名即可

总结

  1. 使用Environment对象封装全部配置信息

  1. 使用@Autowired自动装配数据到Environment对象中

读取对象数据

单一数据读取书写比较繁琐,全数据封装又封装的太厉害了,每次拿数据还要一个一个的getProperties(),总之用起来都不是很舒服。由于Java是一个面向对象的语言,很多情况下,我们会将一组数据封装成一个对象。SpringBoot也提供了可以将一组yaml对象数据封装一个Java对象的操作

首先定义一个对象,并将该对象纳入Spring管控的范围,也就是定义成一个bean,然后使用注解@ConfigurationProperties指定该对象加载哪一组yaml中配置的信息。

这个@ConfigurationProperties必须告诉他加载的数据前缀是什么,这样当前前缀下的所有属性就封装到这个对象中。记得数据属性名要与对象的变量名一一对应啊,不然没法封装。其实以后如果你要定义一组数据自己使用,就可以先写一个对象,然后定义好属性,下面到配置中根据这个格式书写即可。

总结

  1. 使用@ConfigurationProperties注解绑定配置信息到封装类中

  1. 封装类需要定义为Spring管理的bean,否则无法进行属性注入

yaml文件中的数据引用

如果在书写yaml数据时,经常出现如下现象,比如很多个文件都具有相同的目录前缀

  1. center:
  2. dataDir: /usr/local/fire/data
  3. tmpDir: /usr/local/fire/tmp
  4. logDir: /usr/local/fire/log
  5. msgDir: /usr/local/fire/msgDir

或者

  1. center:
  2. dataDir: D:/usr/local/fire/data
  3. tmpDir: D:/usr/local/fire/tmp
  4. logDir: D:/usr/local/fire/log
  5. msgDir: D:/usr/local/fire/msgDir

这个时候你可以使用引用格式来定义数据,其实就是搞了个变量名,然后引用变量了,格式如下:

  1. baseDir: /usr/local/fire
  2. center:
  3. dataDir: ${baseDir}/data
  4. tmpDir: ${baseDir}/tmp
  5. logDir: ${baseDir}/log
  6. msgDir: ${baseDir}/msgDir

还有一个注意事项,在书写字符串时,如果需要使用转义字符,需要将数据字符串使用双引号包裹起来

lesson: "Spring\tboot\nlesson"

 总结

  1. 在配置文件中可以使用${属性名}方式引用属性值

  1. 如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析

一晚上没睡在更新ssm和springboot 喜欢记得关注一下博主顺便点个赞呗!!!球球了!!

2023.2.8  8:29:40

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/67861
推荐阅读
相关标签
  

闽ICP备14008679号