致Spring Boot初学者
???? 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定时器的规则是相当强大,基本上能满足绝大多数复杂的计划任务需求。
5、结束语
如果上面的知识点掌握的差不多后,恭喜您,在此基础上,你已经可以熟练的开展一般web项目的开发了,这个时候,你也可以抽出时间来折腾微服务(如Spring Cloud)、消息总线(如Kafka、RabbitMQ、RocketMQ )、容器(如Docker)等等了。