SpringBoot2.x系列教程01--新纪元之SpringBoot初相见

简介: 前言在上一篇文章中,壹哥 给大家介绍了SpringBoot诞生之前的世界,那时候的世界由Spring主导,负责提供一个供万物生长的土壤,并负责创建万物。但是Spring的世界里,各种生命的创造都很麻烦,需要经历各种流程,大家在这片土地上工作的特别疲累。所以大家都期待着能够出现一个可以让这个世界变得轻松的整合者,所以SpringBoot就来了,为简化而生,向幸福迈进!接下来,壹哥 就带各位正式认识SpringBoot,看看SpringBoot到底是什么,有什么作用,我们该怎么用他!一. 概述当这个世界上大家都在推着独轮车运货的时候,主要就是看谁人多力气大,谁就能多运点东西。但是当汽车产

前言

在上一篇文章中,壹哥 给大家介绍了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来创建;

  1. 手动创建一个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吧。

相关文章
|
2月前
|
Cloud Native Java C++
Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)
文章介绍如何在Spring Boot 3中利用GraalVM将Java应用程序编译成独立的本机二进制文件,从而提高启动速度、减少内存占用,并实现不依赖JVM运行。
237 1
Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)
|
2月前
|
前端开发 Java 数据安全/隐私保护
用户登录前后端开发(一个简单完整的小项目)——SpringBoot与session验证(带前后端源码)全方位全流程超详细教程
文章通过一个简单的SpringBoot项目,详细介绍了前后端如何实现用户登录功能,包括前端登录页面的创建、后端登录逻辑的处理、使用session验证用户身份以及获取已登录用户信息的方法。
237 2
用户登录前后端开发(一个简单完整的小项目)——SpringBoot与session验证(带前后端源码)全方位全流程超详细教程
|
2月前
|
Java API Apache
Springboot+shiro,完整教程,带你学会shiro
这篇文章提供了一个完整的Apache Shiro与Spring Boot结合使用的教程,包括Shiro的配置、使用以及在非Web和Web环境中进行身份验证和授权的示例。
72 2
Springboot+shiro,完整教程,带你学会shiro
|
2月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
375 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
2月前
|
缓存 NoSQL Java
springboot的缓存和redis缓存,入门级别教程
本文介绍了Spring Boot中的缓存机制,包括使用默认的JVM缓存和集成Redis缓存,以及如何配置和使用缓存来提高应用程序性能。
117 1
springboot的缓存和redis缓存,入门级别教程
|
3月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
3月前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
2月前
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
170 0
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
|
2月前
|
存储 JSON 算法
JWT令牌基础教程 全方位带你剖析JWT令牌,在Springboot中使用JWT技术体系,完成拦截器的实现 Interceptor (后附源码)
文章介绍了JWT令牌的基础教程,包括其应用场景、组成部分、生成和校验方法,并在Springboot中使用JWT技术体系完成拦截器的实现。
97 0
JWT令牌基础教程 全方位带你剖析JWT令牌,在Springboot中使用JWT技术体系,完成拦截器的实现 Interceptor (后附源码)
|
4月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的选课管理系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js技术栈的高校选课管理系统的设计与实现。该系统采用前后端分离架构,旨在提高选课效率、优化资源分配及提升用户体验。技术栈包括:后端Spring Boot 2.0、前端Vue 2.0、数据库MySQL 8.0、开发环境JDK 1.8和Maven 3.6等。系统功能覆盖登录、学生信息管理、选课管理、成绩查询等多个方面,并针对学生、教师和管理员提供了不同的操作界面。系统采用了响应式设计,支持多设备访问,并通过Element UI增强了界面的友好性和交互性。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的前后端分离的选课管理系统(含教程&源码&数据库数据)