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实现 LeetCode 516 最长回文子序列

    516. 最长回文子序列 给定一个字符串s,找到其中最长的回文子序列.可以假设s的最大长度为1000. 示例 1: 输入: "bbbab" 输出: 4 一个可能的最长回文子序列为 ...

  2. Java实现 LeetCode 290 单词规律

    290. 单词规律 给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律. 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非 ...

  3. 第六届蓝桥杯JavaC组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.机器人数目 少年宫新近邮购了小机器人配件,共有3类,其中, A类含有:8个轮子,1个传感器 B类含有: 6个轮子,3个传感器 C类含有 ...

  4. 第八届蓝桥杯JavaC组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.外星日历 题目描述 某星系深处发现了文明遗迹. 他们的计数也是用十进制. 他们的文明也有日历.日历只有天数,没有年.月的概念. 有趣的 ...

  5. Java实现旅行商问题

    1 问题描述 何为旅行商问题?按照非专业的说法,这个问题要求找出一条n个给定的城市间的最短路径,使我们在回到触发的城市之前,对每个城市都只访问一次.这样该问题就可以表述为求一个图的最短哈密顿回路的问题 ...

  6. Java实现第十届蓝桥杯等差数列

    试题 I: 等差数列 时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分 [问题描述] 数学老师给小明出了一道等差数列求和的题目.但是粗心的小明忘记了一 部分的数列,只记得其中 N ...

  7. TZOJ 复习时间

    描述 为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑.为了追求更高的效率,xhd要根据难度值来选择合适的课程进行复习,复习后一门课的效率为前一门课之间的难度差的平方,而复习第一门课的效率 ...

  8. PAT A+B和C

    题目描述 给定区间[-2的31次方, 2的31次方]内的3个整数A.B和C,请判断A+B是否大于C. 输入描述: 输入第1行给出正整数T(<=10),是测试用例的个数.随后给出T组测试用例,每组 ...

  9. opencl(3)程序、内核

    1:程序 1)从上下文中创建程序 cl_program clCreateProgramWithSource( cl_context context, //上下文 cl_uint count, //文本 ...

  10. python自学Day03(自学书籍python编程从入门到实践)

    第4章 操作列表 只需要几行代码无论列表有多长,循环都能够让我对列表的每个元素都采取一个或一系列相同的措施,从而高效的处理任何长度的列表. 4.1 遍历整个列表 对列表中每个元素都拿出来,进行一个或者 ...