1、引言

Spring Boot是近两年来火的一塌糊涂,来这里的每一位同学,之前应该大致上学习了web项目开发方面的知识,正在努力成长过程中。因为最近有不少人来向我“请教”,他们大都是一些刚入门的新手,对Spring Boot知识体系还不太了解,一方面听别人说Spring Boot配置简单、开发简单、部署简单,另一方面自己着手开始学习时,却发现头绪好多、有点迷茫,实在是每天回复很多人很麻烦,车轱辘话重复多遍自己也觉得有点无聊,所以在这里统一做个回复吧。
        回顾自己学习过程和项目开展过程中,也曾踩过无数的坑,曾经纠结了好几天才解决其中一个小的技术难点,写这篇文章也是希望能够帮助像我当年一样困惑的Spring Boot初学者走出困境、少走一点弯路、少踩一点坑。
        有关如何快速掌握Spring Boot进行web项目的开发,大家可以看看我的视频内容:https://edu.51cto.com/sd/091c7
        这里要给大家强调的一点是,不是说Spring Boot本身功能就多么强大,而是因为Spring Boot提供了各种组件的启动器(starters),开发者只要能配置好对应组件参数,Spring Boot 就会自动配置,让开发者能快速搭建依赖于 Spring 组件的 Java 项目,也就是说其能够以简洁、简单的方式整合各种业内牛x的组件,这才是它强大的地方。

2、明确Spring Boot阶段性学习目标、不积跬步无以至千里

有时候和朋友、同行交流,会发现,不管系统的行业背景、应用场景、规模大小是怎样的,还是自己所在单位/公司的技术团队的人员数量、技术实力如何、大家谈论的都是微服务、分布式、大数据、高并发、消息总线等,有的web项目明明就是一个小型的系统,但还是要强行上各种显得高大上的技术和框架,仿佛不这样,就显得low,最后的结果是系统臃肿繁杂、项目不断延期、团队成员叫苦连天。
        须知不同的业务场景对应不同的系统架构,每一个大公司现在的技术架构都不是天生就是这么强大的,这些技术架构都是由简单到复杂,每一次的演进都是紧跟业务的需求,为了解决实际问题,而不是天马行空。
        大家有兴趣可以看看淘宝、京东、滴滴、小米等的系统架构演化历史,相信在看的过程中,您一定会露出会心一笑的,也能增强不少的信心,大神也是由菜鸟过来的啊。
        我给Spring Boot初学者的建议就是,不急于求成,不好高骛远,一步一步,稳扎稳打,功到自然成。
        不急于求成,可以避免走弯路,非但不会延缓你成长的速度,反倒会节省你的时间,不好高骛远,达成一个目标,再制定下一个目标,在连续的成功和进步中,建立起自信心,激发出更强的学习兴趣。

3、如果作为一个后台程序员,Spring Boot基础应该要掌握哪些呢?

后台程序员主要是关心系统中数据库的增删查改(CRUD),较少关心数据的表现,所以在Spring Boot基础中,只需掌握以下的各项知识点,应该就可以了。

  

希望大家在学习新东西时,利用帕累托法则,也就是2/8法则,对于其中最重要、最常用的知识点(一般不超过20%)一定掌握,剩余的知识只需了解,有个概念即可,用到时再去现学,这样可以照顾到我们的精力,不至于搞得精疲力尽。
以上知识点中的重心概述如下:
Java基础:除了基本的语法外,重点掌握类、接口、集合、这三方面的知识,了解反射、泛型就更好了。
Maven:了解依赖、依赖传递的概念,知道本地仓库、中央仓库、第三方仓库是怎么回事,掌握如何配置本地仓库以及指定国内的第三方仓库(如阿里),知道如何打包。
数据库基础:掌握MySQL数据库(或者其分支Mariadb),能够建库、建表、建字段,能够较为熟练的撰写常用的SQL语句就行。
IntelliJ IDEA:清楚如何创建工程、如何进行工程设置、能够在setting中进行常用的设置等等。
项目初始化创建:知道如何快速创建Spring Boot工程,了解在网络不通畅时,如何利用jar包搭建本地服务进行工程创建。
包目录、资源目录:知道一个基础的Spring Boot工程都应该包含哪些包,同时知道资源目录中各项资源文件夹的作用

基本配置:知道常用的配置,如何创建开发环境、生产环境配置。
jar包依赖(pom.xml):掌握如何撰写依赖配置,利用Maven进行jar包的自动管理。
实体层Domain:主要是掌握如何设置实体的不同类型主键(如自增列、UUID),对应数据库不同类型字段的设置,如整型、浮点型、文本型、字符串类型等,如果能够更进一步了解实体之间的映射关系,如一对多、多对一、多对多就更好了。
控制层Controller:主要是弄清楚各项注解的意思及使用方法,明白@Controller和@RestController的区别,清楚如何接收/反馈数据或网页,掌握RESTful设计风格是怎么回事。
数据仓库层Repository:知道四大接口CrudRepository、PagingAndSortingRepository、JpaRepository、JpaSpecificationExecutor及适用场景。
业务层Service:创建业务层,一般都是先创建接,在创建实现类,在实现类中注入响应的数据仓库层Repository接口。
Thymeleaf模板:Spring Boot工程中已经不建议大家使用JSP,而是采用Thymeleaf模板了,掌握Thymeleaf常用的语法就行,对较少用到的知识点有个概念,不一定掌握,用到时再查。
工程打包:知道如何利用Maven对工程进行打包,可以达成jar包和war包,根据实际情况而定。

4、如果作为一个全栈工程师,Spring Boot开发web项目又该掌握哪些基础知识呢?

一般中大型公司都是分工明确,对全栈工程师不会有什么需求,但大量的中小型公司,由于研发团队规模较小,往往一个web工程师同时承担前、后端开发工作,对全栈工程师的需求很大,另外从个人的职业发展前景看,“一专多能”能够有效拓展自己的职业道路,技多不压身,只是一定要切记“一专多能”,在一专的基础上多能,这样才有竞争力。
基于上面的知识图谱,Spring Boot开发web项目对全栈工程师的基础要求又是什么呢,见下图

从上图可以看出,前端知识除了html、css和javascript外,还提到了Bootstrap和RequireJS。
Bootstrap:简洁、直观、强悍的前端开发框架,让web开发更迅速、简单,响应式布局,丰富的控件,也是最近这几年很火的一个前端框架(有的人说这不算框架,仅仅是css、js组件的开发库,不管这些,好用就行)。
RequireJS:JavaScript模块加载器,支持异步加载JS组件(通过扩展,还可以管理CSS文件),最大作用按需异步加载JS组件,另外附带的一个效果是让页面干净清爽了。

5、如果已经掌握了以上Spring Boot的基础知识,想要进一步进阶,又该掌握哪些必须的知识点呢?

假设我们现在已经掌握了Spring Boot的各项基础知识了,能够本本分分的利用该后台框架做一些基础的开发工作了,但不满足当前已经掌握的开发技能,如何进一步扩展我们的知识库呢?
还是基于以上的图谱(全栈工程师),进行扩展,进行说明如下:

从上图我们可以看到,前端内容增加了一个Vue和图形图表,后端增加的东西较多。
前端的Vue不做要求,能掌握是相当好的(这是当前非常火热的前端框架,比较好上手,同时能够有效的拓宽您的就业渠道,毕竟要求有Vue经验的公司是越来越多)。
后端的知识点可不仅仅是上面这些,但列出的这些事必须掌握的,如果这些都掌握,并能熟练运用,那么恭喜您,在很多公司里面,您已经能够跻身中级程序员的队伍了。
Vue:是一套构建用户界面的渐进式框架,只关注视图层, 采用自底向上增量开发的设计,Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件,有了Vue,你就再不用为繁琐的操作页面中DOM而烦恼了,并且Vue和Bootstrap并不是相互竞争的关系,而是可以很好的互为补充,官网:https://cn.vuejs.org/
图形图表:数据的可视化展现可以给web项目带来强大的视觉冲击力,这方面的的js组件相当多,推荐采用百度的Echarts,推荐理由强大、直观、易用:https://www.echartsjs.com/zh/index.html
Spring Security:web系统中角色权限控制模块是必不可少的,利用Spring Security可以很好的实现角色权限控制,功能也相当强大。
Spring AOP:面向切面编程,利用Spring AOP我们可以用非侵入式的方式实现我们在整个系统中需要的功能,如日志记录、性能监控、事务管理等。
业务报表:报表生成也是实际系统必不可少的一个模块,这里我推荐开源报表JasperReport,推荐理由:强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式,使用者也是相当多。
websocket:WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据,如果对主动向页面推送消息(区别于主动查询)的需求比较迫切,那么websocket就必须掌握(当然,您不用websocket也能实现前端消息的通知,那就是通过js定时向后端发起请求来获取新消息,但这样太不够优雅了)。
Redis缓存:这个就不用强调了,只要做web开发的,都知道缓存对系统性能的提升能力;
quartz定时器:一般系统只要存在计划任务的,用quartz定时器是相当方便的,况且quartz定时器的规则是相当强大,基本上能满足绝大多数复杂的计划任务需求。

6、结束语

如果上面的知识点掌握的差不多后,恭喜您,在此基础上,你已经可以熟练的开展一般web项目的开发了,这个时候,你就可以抽出时间来折腾微服务(如Spring Cloud)、消息总线(如Kafka、RabbitMQ、RocketMQ )、容器(如Docker)等等了。

  有关如何快速掌握Spring Boot进行web项目的开发,大家可以看看我的视频内容:https://edu.51cto.com/sd/091c7

致Spring Boot初学者的更多相关文章

  1. 从零一起学Spring Boot之LayIM项目长成记(一) 初见 Spring Boot

    项目背景 之前写过LayIM的.NET版后端实现,后来又写过一版Java的.当时用的是servlet,websocket和jdbc.虽然时间过去很久了,但是仍有些同学在关注.偶然间我听说了Spring ...

  2. 适合初学者的一个分布式环境搭建过程(spring boot + zookeeper + dubbo + mybatis + mysql)

    本人也是才开始接触 阿里巴巴的开源分布式框架 dubbo,因为现在微服务框架 spring boot也非常的火,然后结合dubbo的官网搭建这个开发环境. 一.首先 zookeeper作为集群管理服务 ...

  3. spring boot简单的小demo(适合于初学者)

    import com.example.demo2.com.example.dao.ShopDao; import com.example.demo2.com.example.entity.Shops; ...

  4. 不常见偏门的Bug,Spring Boot IDEA 静态资源 图片访问404,初学者之殇

    用过Idea朋友都知道,它有一个非常让人喜欢的功能就是:打算在某个a目录下创建一个hello.class文件,那么你仅需要右键点击New-Java Class- 然后输入名字:a.hello 即可. ...

  5. 使用intelliJ创建 spring boot + gradle + mybatis站点

    Spring boot作为快速入门是不错的选择,现在似乎没有看到大家写过spring boot + gradle + mybatis在intellij下的入门文章,碰巧.Net同事问到,我想我也可以写 ...

  6. 我的第一个spring boot程序(spring boot 学习笔记之二)

    第一个spring boot程序 写在前面:鉴于spring注解以及springMVC的配置有大量细节和知识点,在学习理解之后,我们将直接进入spring boot的学习,在后续学习中用到注解及其他相 ...

  7. Spring Boot Document Part II(上)

    Part II. Getting started 这一章内容适合刚接触Spring Boot或者"Spring"家族的初学者!随着安装指导说明,你会发现对Spring boot有一 ...

  8. 从零一起学Spring Boot之LayIM项目长成记(五)websocket

    前言 距离上一篇已经比较久的时间了,项目也是开了个头.并且,由于网上的关于Spring Boot的websocket讲解也比较多.于是我采用了另外的一个通讯框架 t-io 来实现LayIM中的通讯功能 ...

  9. 从零一起学Spring Boot之LayIM项目长成记(三) 数据库的简单设计和JPA的简单使用。

    前言 今天是第三篇了,上一篇简单模拟了数据,实现了LayIM页面的数据加载.那么今天呢就要用数据库的数据了.闲言少叙,书归正传,让我们开始吧. 数据库 之前有好多小伙伴问我数据库是怎么设计的.我个人用 ...

随机推荐

  1. java实现不连续处断开

    不连续处断开 下列代码运行结果为: 12345 23456 89 23456789 即把一个串从数字不连续的位置断开.试完善之. String s = "123452345689234567 ...

  2. java实现第四届蓝桥杯剪格子

    剪格子 题目描述 如图p1.jpg所示,3 x 3 的格子中填写了一些整数. 我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60. 本题的要求就是请你编程判定:对给定的m x n 的格子 ...

  3. java代码(1)---Java8 Lambda

     Lambda 一.概述   1.什么是Lambda表达式 //1.不需要参数,返回值为5 () -> 5 //2.接收一个参数(数字类型),返回其2倍的值 x -> 2 * x //3. ...

  4. Spring Data Jpa Specification 调用Oracle 函数/方法

    开发框架用的Jpa,数据库是 Oracle. 在开发中难免会遇到需要数据库字段是字符串格式,但是又需要对其进行范围查询(数据库设计问题,后续应避免).那么问题来了, Jpa Specification ...

  5. iOS-Core Foundation框架到Foundation桥接的三种方式

    温故知新.勤总结,才能生巧!这次总结一下 :Core Foundation框架到Foundation桥接的三种方式 Foundation提供OC的基础类(像NSObject).基本数据类型等. Cor ...

  6. JAVA 代码查错

    1.abstract class Name { private String name; public abstract boolean isStupidName(String name){}} 大侠 ...

  7. java 中有几种类型的流?

    字节流,字符流. 字节流继承于 InputStream \ OutputStream, 字符流继承于 InputStreamReader \ OutputStreamWriter. 在 java.io ...

  8. .net core3.1 abp动态菜单和动态权限(动态菜单实现和动态权限添加) (三)

    我们来创建动态菜单吧 首先,先对动态菜单的概念.操作.流程进行约束:1.Host和各个Tenant有自己的自定义菜单2.Host和各个Tenant的权限与自定义菜单相关联2.Tenant有一套默认的菜 ...

  9. router-view中绑定key='$route.fullPath'

    原文链接https://www.jianshu.com/p/cf2fb443620f 来源:简书 作者:myzony 不设置 router-view 的 key 属性 由于 Vue 会复用相同组件, ...

  10. GetLastError返回值含义

    GetLastError的返回值的含义: (0)-操作成功完成. (1)-功能错误. (2)- 系统找不到指定的文件. (3)-系统找不到指定的路径. (4)-系统无法打开文件. (5)-拒绝访问. ...