前言
在上一篇文章中,壹哥 给大家介绍了SpringBoot诞生之前的世界,那时候的世界由Spring主导,负责提供一个供万物生长的土壤,并负责创建万物。但是Spring的世界里,各种生命的创造都很麻烦,需要经历各种流程,大家在这片土地上工作的特别疲累。所以大家都期待着能够出现一个可以让这个世界变得轻松的整合者,所以SpringBoot就来了,为简化而生,向幸福迈进!
接下来,壹哥 就带各位正式认识SpringBoot,看看SpringBoot到底是什么,有什么作用,我们该怎么用他!
一. 概述
当这个世界上大家都在推着独轮车运货的时候,主要就是看谁人多力气大,谁就能多运点东西。但是当汽车产生以后,人再多也干不过喝汽油的大卡车!而SpringBoot的诞生,就无异于把开发这个世界从独轮车时代带入了汽车时代!所以,一切都变了,变得简单了,轻松几下,我们就能做很多!
1. Spring Boot的诞生背景
我们知道,现在一些动态语言慢慢的开始流行(Ruby、Groovy、Scala、Node.js)起来了,这时候就越发的显得传统的Spring开发方式看起来显得格外的笨重,显得Spring的开发缺点很多,比如:
①. 配置繁多而杂乱;
②. 开发效率低下而重复;
③. 项目部署复杂而困难;
④. 集成第三方库难度大......
在这样一个时代背景下,Spring 团队在现有Spring框架的基础上发布了一个新的开发框架---Spring Boot。该框架是由Spring Pivotal 团队提供的全新框架,其设计目的主要是用来简化Java Web项目的初始搭建,配置以及开发过程,为我们的开发带来极大遍历!
2. SpringBoot简介
那么SpringBoot到底是什么呢?我们来看看官网对SpringBoot的介绍吧,如下图所示:
从上面的介绍中可知,Spring Boot可以帮助我们轻松地创建出一个基于Spring,且能够直接运行的独立的生产级应用程序。
而且利用SpringBoot可以很容易的整合Spring和其他第三方库,更重要的是SpringBoot采用了“约定大于配置”的思想理念,大量的减少了配置文件的使用,可以让我们的项目快速的开发部署运行起来。
并且SpringBoot自身就内嵌了Tomcat,Jetty,Undertow等Web服务器,可以让我们灵活的选择到底该生成什么类型的应用程序,常见项目类型如下:
①. jar包程序;
②. war包程序;
另外SpringBoot中还提供了一个可以运行项目的“spring script”的命令行工具,方便我们快速方便的启动项目。
3. Spring Boot要点分析
接下来 壹哥 带各位来看看SpringBoot的主要特点,了解一下SpringBoot到底有哪些特性,看看这些新特性能不能激发出我们学习SpringBoot的欲望吧。
3.1 特点
我们先看一张SpringBoot官网关于其特点的截图,如下:
这些特点我给大家翻译总结如下:
- SpringBoot可以创建独立的Spring应用程序;
- SpringBoot中直接内嵌了Tomcat、Jetty或Undertow(无需部署WAR文件)等web服务器;
- SpringBoot提供了“初始”的POM文件内容,以简化Maven配置;
- SpringBoot可以尽可能自动地配置Spring;
- SpringBoot可以提供生产就绪的功能,如指标,健康检查和外部化配置等功能;
- SpringBoot可以绝对无代码生成,也不需要XML配置。
3.2 优点
根据上述特点,我们就可以提取出SpringBoot的主要优点了,如下图所示:
- 快速构建项目,缩短开发时间;
- 对主流开发框架的无配置集成;
- 易于理解和开发Spring应用;
- 项目可独立运行,无需依赖外部的 Servlet 容器;
- 提供运行时的应用监控;
- 极大地提高了开发、部署效率;
- 与云计算的天然集成。
3.3 缺点
当然,任何一个技术都不可能是十全十美的,SpringBoot也不例外,他虽然是个王者,但也有缺点:
- 版本迭代速度很快,一些模块改动很大;
- 由于不用自己做配置,报错时很难定位;
- 网上现成的解决方案比较少。
我们学习一个技术,肯定要综合考虑,只要这个技术能够做到瑕不掩瑜,那就可以考虑使用。更何况SpringBoot的有点明显大于缺点,所以我们就这么愉快地决定啦,SpringBoot,学起来!
4. 关于”约定大于配置“(重点)
在上面 壹哥 给大家提到了一个思想,即”约定大于配置“,那什么是约定大于配置呢?我们先来看看比较正式的定义:
约定大于配置(Convention Over Configuration),也称作按约定编程,这是一种软件设计范式。目的在于减少软件开发人员所需要做出的决定数量,从而获得简单灵活的好处,开发人员仅仅需要规定应用中不符合约定的部分。约定大于配置也被称为习惯优于配置、约定优于配置等。
能不能说人话,上面的根本看不懂啊!那,好吧,壹哥 再通俗的解释一下咯。
其实所谓的约定大于配置,就是指我们在开发中,有些xml或yml文件中的配置项,如果你没有配置的话,程序就会采用一个默认值。换句话说,只要程序能采用默认值的配置,就不需要我们再手动配置了,而这个默认值就是约定!就比如:
- /src/main/java目录用来存放java源文件;
- src/main/resources目录用来存放资源文件,如application.yml文件,mybatis的*mapper.xml文件;
- /src/test/java目录用来存放java测试文件;
- /src/test/resources目录用来存放测试资源文件;
- /target目录为项目的输出位置。
你可能会问,为啥非得在A目录中存放A文件,而不是存放B文件?我非得在/src/main/java中存放测试类不行吗?
你非要这么干,不是说不能实现这个功能,而是这样就打破了大家约定俗成的一种规则,也就是我们上面说的”约定“!就好比在国内,大家走路都走右边,你非得特立独行走左边,行不行呢?当然也不是说不行对吧,你走马路左边也能从北京走到上海,但是你在别人眼里就是个另类,出了事就是你的责任,因为你没有遵守大家都在遵循的一种”约定“!
对于我们人来说,能够满足大多数人的习惯的约定就是一种好的约定,而在程序中,能够简化代码的实现,使代码高可用的约定就是一种好的约定,所以一个好的约定可以减少很多配置。
SpringBoot中"约定大于配置"的思想,其实就是SpringBoot为我们的开发提供了一套已经配置好的默认值。这样就不需要再像以前那样去手动地编写xml配置文件了,只有默认配置项不能满足我们的需求时,才需要去修改配置,也就是说采用默认的"约定"就足够了,这就是所说的"约定"大于(优先于)我们自己的配置。
二. 环境配置
介绍了这么多SpringBoot的理论知识,接下来我们还是动起手来实操一把,毕竟SpringBoot主要还是实战为主,理论并没有那么多。
在进行开发之前,我们先看看SpringBoot开发之前对我们的开发环境有哪些要求吧。
1. 基本说明
本系列教程采用Spring Boot 2.x.x.RELEASE版本;
采用Java 8版本;
要求使用Spring Framework5.0.4.RELEASE或更高版本;
打包工具是Maven 3.2+ 或 Gradle 4+。
另外Spring Boot本身也内嵌了一些Servlet容器,如下图所示:
以上这些是基本说明,大家注意即可。
2. 安装配置JDK 8.0+
我们可以先查看一下自己的JDK版本,是不是JDK 8以上版本,太低的版本不行哦。
#检查java环境$ java-version
3. 安装配置Maven3.2+
我这里采用的是Maven作为打包工具,Maven3.x版本都可以的,可以查看一下自己的版本是否合适。
#检查maven环境$ mvn-v
4. 选装配置Gradle4.0+
当然我们做web开发的时候,虽然一般都是采用Maven环境,但是也可以使用Gradle来进行依赖包的下载管理。如果你的环境是Gradle,那么也可以尝试一下,注意本教程采用Maven环境!
Spring Boot提供了一个有用的Gradle插件,可以用来简化依赖声明和创建可执行的jar,我们可以参考如下Gradle依赖插件配置:
plugins { id 'org.springframework.boot' version '2.0.0.RELEASE' id 'java'} jar { baseName ='firstProject' version ='0.0.1-SNAPSHOT'} repositories { jcenter() } dependencies { compile("org.springframework.boot:spring-boot-starter-web") testCompile("org.springframework.boot:spring-boot-starter-test") }
三. SpringBoot项目创建方式
以上就是我们开发SpringBoot项目之前的基本要求说明,接下来 壹哥 就开始带大家创建第一个SpringBoot项目啦,期待ing......
1. SpringBoot项目创建方式
在开始创建第一个项目之前,壹哥 先介绍一下SpringBoot项目的创建方式,我们在Intellij ideal中创建SpringBoot项目的方式可以有如下3种:
1. 通过IDE的Spring Initializr来创建;
- 手动创建一个Maven工程,然后引入SpringBoot所需的dependency来完成;
3. 通过Spring官网提供的模板来创建Spring boot项目,模板地址:https://start.spring.io/。
以上这3种创建SpringBoot项目的方式,其实哪一种都可以的,当然以后大家选一个自己习惯的方式即可,接下来壹哥先采用第一种方式给大家创建一个SpringBoot项目。
因为本系列教程主要以实战为主,受限于文字格式,所以我会把项目开发过程以图片的形式,一步一步的给大家进行展示,只要你认真的跟着我的教程去做,壹哥 保证你可以学会并精通SpringBoot的用法!接下来就是正式的项目开发步骤咯,仔细看起来!
这里我先以Spring Initializr方式创建我们的第一个SpringBoot项目,以下就是具体创建步骤了。
2. 新建项目
首先我们先按下图所示,创建一个新项目,注意不是module哦!
3. 选择Spring Initializr
然后就会进入到如下界面,我们选择Spring Initializr即可。
4. 设置项目的包名及坐标GAV信息
接着进入到下面的界面,进行GAV坐标设置,至于什么是GAV坐标,请复习之前壹哥给大家讲过的Maven内容。如果确实不会,可以去腾讯课堂,搜索”一一哥“,在那里我有专门的Maven详细教程,特别细哦!
5. 设置启动器及SpringBoot版本
接着我们选择一个SpringBoot版本,这里我采用的是SprintBoot2.2.5版本,大家自由选择即可,但是不建议采用太高版本,尽量与我一致。
注意:
该方式默认是从spring.io官网上下载源码模板,然后自动导入的ideal中,所以对网速要求较高,有可能下载不成功!
6. 设置项目模块名称及存储位置
有了项目模板之后,我们接着设置项目的模块信息及存储位置,以后的案例会有很多,所以大家尽量选择一个合适的存储位置方便我们后续管理项目。
7. 项目包结构及pom文件内容
接着打开模块的pom.xml文件,在这里查看一下其中的xml配置,这些配置项是必须的,我们省略不了哦。
这里展示的是spring-boot父项目的依赖配置。
这里展示的是spring-boot-starter启动器配置。
这里展示的是spring-boot提供的maven编译插件,用于和maven配置进行项目的打包编译等操作。
8. 添加web启动器
因为我们肯定是要创建一个web项目,所以需要有一个web依赖包,这里就包含了之前SSM配置时代中很多的依赖包。
大家可以直接把下面的依赖配置粘贴到pom.xml文件中。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
注意:
如果你忘了添加该web启动器,会无法启动web项目哦!
9. 在项目入口处启动项目
接下来我们就可以打开java代码包,发现有一个XxxApplication类,如下图所示:
点击这个绿色的三角箭头,就可以启动我们的SpringBoot项目啦,开心吧。
项目启动起来了,注意看console控制台的内容。
这样我们的第一个由SpringBoot创建的Web项目就启动运行起来了!
10. 项目结构
最后我再放一个全局图片,给大家看看整个项目的结构。
通过上面步骤完成了第一个web项目的创建,如上图所示,Spring Boot的基础结构共三个文件(具体路径根据用户生成项目时填写的Group所有差异)。
11. 工程目录结构
在上面的项目中有很多的文件,那么这些文件都是什么作用呢?壹哥 给大家细说一下。
│ .gitignore
│ pom.xml
│
└─src
├─main
│ ├─java
│ │ └─com
│ │ └─syc
│ │ └─boot
│ │ └─demo01
│ │ Demo01Application.java
│ │
│ └─resources
│ │ application.properties
└─test
└─java
└─com
└─syc
└─boot
└─demo01
│ │ Demo01ApplicationTests.java
各目录文件作用如下:
- src/main/java下的程序入口:Demo01Application;
- src/main/resources下的配置文件:application.properties
- src/test/下的测试入口:Demo01ApplicationTests.
- .gitignore:Git 过滤配置文件
- pom.xml:Maven 的依赖管理配置文件
- Demo01Application.java:程序入口
- resources:资源文件目录
- static: 静态资源文件目录
- templates:模板资源文件目录
- application.properties:Spring Boot 的配置文件,实际开发中会替换成 YAML 语言配置(application.yml)
生成的Demo01Application和Demo01ApplicationTests类都可以直接运行来启动当前创建的项目,如果项目中没有添加任何数据访问或Web模块的依赖包,程序会在加载完Spring之后结束运行。
结语
至此,壹哥 就给大家介绍了SpringBoot的一些理论内容,并带大家创建了第一个SpringBoot Web项目,你学会了吗?
留个小作业:
尝试使用第2和第3种方式,创建一个SpringBoot Web项目!看看自己能不能完成,完成的在评论区666吧。