致Spring Boot初学者
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初学者的更多相关文章
- 从零一起学Spring Boot之LayIM项目长成记(一) 初见 Spring Boot
项目背景 之前写过LayIM的.NET版后端实现,后来又写过一版Java的.当时用的是servlet,websocket和jdbc.虽然时间过去很久了,但是仍有些同学在关注.偶然间我听说了Spring ...
- 适合初学者的一个分布式环境搭建过程(spring boot + zookeeper + dubbo + mybatis + mysql)
本人也是才开始接触 阿里巴巴的开源分布式框架 dubbo,因为现在微服务框架 spring boot也非常的火,然后结合dubbo的官网搭建这个开发环境. 一.首先 zookeeper作为集群管理服务 ...
- spring boot简单的小demo(适合于初学者)
import com.example.demo2.com.example.dao.ShopDao; import com.example.demo2.com.example.entity.Shops; ...
- 不常见偏门的Bug,Spring Boot IDEA 静态资源 图片访问404,初学者之殇
用过Idea朋友都知道,它有一个非常让人喜欢的功能就是:打算在某个a目录下创建一个hello.class文件,那么你仅需要右键点击New-Java Class- 然后输入名字:a.hello 即可. ...
- 使用intelliJ创建 spring boot + gradle + mybatis站点
Spring boot作为快速入门是不错的选择,现在似乎没有看到大家写过spring boot + gradle + mybatis在intellij下的入门文章,碰巧.Net同事问到,我想我也可以写 ...
- 我的第一个spring boot程序(spring boot 学习笔记之二)
第一个spring boot程序 写在前面:鉴于spring注解以及springMVC的配置有大量细节和知识点,在学习理解之后,我们将直接进入spring boot的学习,在后续学习中用到注解及其他相 ...
- Spring Boot Document Part II(上)
Part II. Getting started 这一章内容适合刚接触Spring Boot或者"Spring"家族的初学者!随着安装指导说明,你会发现对Spring boot有一 ...
- 从零一起学Spring Boot之LayIM项目长成记(五)websocket
前言 距离上一篇已经比较久的时间了,项目也是开了个头.并且,由于网上的关于Spring Boot的websocket讲解也比较多.于是我采用了另外的一个通讯框架 t-io 来实现LayIM中的通讯功能 ...
- 从零一起学Spring Boot之LayIM项目长成记(三) 数据库的简单设计和JPA的简单使用。
前言 今天是第三篇了,上一篇简单模拟了数据,实现了LayIM页面的数据加载.那么今天呢就要用数据库的数据了.闲言少叙,书归正传,让我们开始吧. 数据库 之前有好多小伙伴问我数据库是怎么设计的.我个人用 ...
随机推荐
- Java实现 LeetCode 564 寻找最近的回文数(今天要GG在这道题了 头晕+题难(((φ(◎ロ◎;)φ))))
564. 寻找最近的回文数 给定一个整数 n ,你需要找到与它最近的回文数(不包括自身). "最近的"定义为两个整数差的绝对值最小. 示例 1: 输入: "123&quo ...
- Java实现 LeetCode 437 路径总和 III(三)
437. 路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点 ...
- Java实现P2102 -- 正整数序列
P2102 – 正整数序列 给定正整数n, 你的任务是用最少的操作次数把序列1,2,-,n中的所有数都变成0.每次操作可从序列中选择一个或多个整数, 同时减去一个相同的正整数.比如,1,2,3可以把2 ...
- 关于领域驱动设计 DDD(Domain-Driven Design)
以下旨在 理解DDD. 1. 什么是领域? 妈妈好是做母婴新零售的产品,应该属于电商平台,那么电商平台就是一个领域. 同一个领域的系统都有相同的核心业务. eg: 电商领域都有:商品浏览.购物 ...
- openshift v1.5 不能登录system:admin 问题
这个好像是无法解决的,我按照github和google所有步骤试过了,还是不能登录system:admin .需要密码.弄了两个小时,后来放弃了,直接使用新版本3.6的,按照官网方法部署,可以使用直接 ...
- IAT表
0X0 0 DLL介绍 DLL翻译器为动态链接库,原来不存在DLL的概念只有,库的概念,编译器会把从库中获取的二进制代码插入到应用程序中.在现在windows操作系统使用了数量庞大的库函数(进程,内存 ...
- 线上服务的FGC问题排查,看这篇就够了!
线上服务的GC问题,是Java程序非常典型的一类问题,非常考验工程师排查问题的能力.同时,几乎是面试必考题,但是能真正答好此题的人并不多,要么原理没吃透,要么缺乏实战经验. 过去半年时间里,我们的广告 ...
- TensorFlow从0到1之浅谈深度学习(10)
DNN(深度神经网络算法)现在是AI社区的流行词.最近,DNN 在许多数据科学竞赛/Kaggle 竞赛中获得了多次冠军. 自从 1962 年 Rosenblat 提出感知机(Perceptron)以来 ...
- Windows 10 WSL 2.0安装并运行Docker
在Windows 10 2004版本,微软更新WSL到了2.0,WSL 2.0已经拥有了完整的Linux内核!今天来测试一下,是否可以安装docker! 一.开启WSL 以管理员运行Powershe ...
- 基于SSM框架的新生报到可视化系统
1.本课题的目的及意义 新生报到数据一直是困扰着各大高校的管理性问题,人数多.工作量大,这无疑是一个挑战,也因此加快了高校的信息化建设步伐.随着互联网的普及与发展,日常生活中人们接触到的数据正以惊人的 ...