本教程将以SpringBoot 2.3/2.4 进行讲解。
学习要求
本系列的是对SpringBoot进行讲解,所以需要对Spring有一定的基础,SpringBoot翻译可以理解为Spring框架脚手架。既然是脚手架,学过前端的同学也知道脚手架依赖很多依赖包,所以这里也需要对Maven有熟悉的使用。
说白了就两点
- 熟悉Spring基础
- 熟悉Maven使用
使用的环境是
- Java8及以上
- Maven 3.3及以上:https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-system-requirements
PS: 如果使用到JDK9以上的话,需要自己在Maven引入JDK8 缺乏的maven包,这个可以自己百度一下,网上有很多相关的内容
SpringBoot的由来
开头我已经讲过SpringBoot是Spring的一个脚手架,那么Spring框架可以用来做什么?
在Spring的官网有说明,可以做以下功能
做个Spring MVC开发的老JAVA们都知道,你要写一个JAVA程序,你需要写很多的JAVA配置,就算你用Spring框架,也逃离这个噩梦。很多老JAVA都是写完一个配置后,封装好之后,又把这些文件考到另一个项目中使用。所以你看到老程序员们,都有一个自己的代码库。可是用来SpringBoot之后。我们最大的解封就是无需配置了,SpringBoot帮我们自带配置,也不用像以前的JAVA程序开发完后,打包成war包再部署到Tomcat。
- Create stand-alone Spring applications
- 创建独立Spring应用
- Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
- 内嵌web服务器
- Provide opinionated 'starter' dependencies to simplify your build configuration
- 自动starter依赖,简化构建配置
- Automatically configure Spring and 3rd party libraries whenever possible
- 自动配置Spring以及第三方功能
- Provide production-ready features such as metrics, health checks, and externalized configuration
- 提供生产级别的监控、健康检查及外部化配置
- Absolutely no code generation and no requirement for XML configuration
- 无代码生成、无需编写XML
SpringBoot是整合Spring技术栈的一站式框架SpringBoot是简化Spring技术栈的快速开发脚手架
这是SpringBoot的优点,不过同时也有一定的缺点
- 人称版本帝,迭代快,需要时刻关注变化
- 封装太深,内部原理复杂,不容易精通
SpringBoot是的一个上手容易,深入难的东西。因为Spring框架本来就是一个很庞大的框架。可以介入到个个领域。
微服务
随着时代的发展,微服务风口也越来越普及。那什么是微服务呢,我总结了几个点。
- 微服务是一种架构风格
- 一个应用拆分为一组小型服务
- 每个服务运行在自己的进程内,也就是可独立部署和升级
- 服务之间使用轻量级HTTP交互
- 服务围绕业务功能拆分
- 可以由全自动部署机制独立部署
- 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术
这么多个服务要部署,如果没有一个类似的SpringBoot的脚手架来快速帮我们构建项目,感觉是一件非常痛苦的事情,你想想光写配置,你都不知道要维护多久。
所以说SpringBoot只有好处,没有什么坏处。
了解自动配置原理
依赖管理
依赖管理这个是我们的项目pom.xml编写的
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
spring-boot-starter-parent的工程又依赖了spring-boot-dependencies
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
spring-boot-dependencies
几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制。
开发导入starter场景启动器
1、见到很多 spring-boot-starter-* : *就某种场景
2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
3、SpringBoot所有支持的场景
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
4、见到的 *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。
5、所有场景启动器最底层的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
无需关注版本号,自动版本仲裁
1、引入依赖默认都可以不写版本
2、引入非版本仲裁的jar,要写版本号。
- 可以修改默认版本号
1、查看spring-boot-dependencies里面规定当前依赖的版本 用的 key。
2、在当前项目里面重写配置在properties
节点下修改版本号
<properties>
<mysql.version>5.1.43</mysql.version>
</properties>
自动配置
- 自动配好Tomcat
- 引入Tomcat依赖。
- 配置Tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
自动配好SpringMVC
- 引入SpringMVC全套组件
- 自动配好SpringMVC常用组件(功能)
自动配好Web常见功能,如:字符编码问题
- SpringBoot帮我们配置好了所有web开发的常见场景
默认的包结构
- 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来,这就是为什么SpringBoot需要把逻辑代码放在一个包下载编写的一个原因。
- 无需以前的包扫描配置
- 想要改变扫描路径,@SpringBootApplication(scanBasePackages="com.atguigu")
- 或者@ComponentScan 指定扫描路径
@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")
面试题问得最多的地方也是在这里,我们这里要答的话,最好把以上四个注解都一起回答
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。