致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定时器的规则是相当强大,基本上能满足绝大多数复杂的计划任务需求。

5、结束语

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

原文地址:https://blog.51cto.com/3058076/2468490

时间: 2024-10-25 06:05:39

致Spring Boot初学者的相关文章

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

项目背景 之前写过LayIM的.NET版后端实现,后来又写过一版Java的.当时用的是servlet,websocket和jdbc.虽然时间过去很久了,但是仍有些同学在关注.偶然间我听说了SpringBoot这么个东东,据说是省去了很多繁杂的配置.可以傻瓜式的创建项目,轻轻松松做出一个网站来,那么出于我对LayIM的情有独钟,于是乎想借用它来帮助我学习SpringBoot,并且全程记录,省的以后再走弯路和掌握解决问题的方法.(当然,我也是新手,我的解决方法就是百度,stackovreflow等网

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

本人也是才开始接触 阿里巴巴的开源分布式框架 dubbo,因为现在微服务框架 spring boot也非常的火,然后结合dubbo的官网搭建这个开发环境. 一.首先 zookeeper作为集群管理服务器,安装和配置在这里就不说了 划分为 4个项目 项目目录如下: 4个项目的依赖关系是:common里面暂时存放的只有user一个实体类,后面陆续会加上其他的公共类,分页,验证等,这个项目不依赖其他的项目,其他3个项目都需要依赖它,所有这个项目需要先打包(相信做个maven项目的人应该都会-----如

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

import com.example.demo2.com.example.dao.ShopDao; import com.example.demo2.com.example.entity.Shops; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframew

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

第一个spring boot程序 写在前面:鉴于spring注解以及springMVC的配置有大量细节和知识点,在学习理解之后,我们将直接进入spring boot的学习,在后续学习中用到注解及其他相关知识点时会再次理解.要运行起第一个Spring boot特别简单,用IDEA包含了Spring Boot的引导,直接新建一个spring boot项目. 注意: 1.第一次新建Spring boot项目的时候,maven会下载大量的依赖到本地,所以特别慢,耐心等待或者用国内的maven公库都行(自

Spring Boot 常规错误一览及解决方案

更新信息 2016-03-13 开贴 想法很单纯,将自己在Spring Boot学习过程中遇到的各种麻烦列出来,并提供解决方案待查. 正题开始,遇到错误可通过报错信息对号入座: 错误提示:java.net.BindException: Address already in use: bind 推测原因:一开始接触Spring Boot时很常见的错误,端口已绑定.之前已启动Application,Spring Boot会启动内嵌的Tomcat,并绑定端口8080启动前端服务.作为Web应用,程序自

spring boot + gradle + mybatis

使用intelliJ创建 spring boot + gradle + mybatis站点 Spring boot作为快速入门是不错的选择,现在似乎没有看到大家写过spring boot + gradle + mybatis在intellij下的入门文章,碰巧做.Net的同学问到,我想我也可以写这样一篇.入门Java的人最大的问题是步骤繁琐,不知道如何开始,之前我也建议过我的一个小弟用BlueJ去学Java,可是这个东西学得他很迷茫,根本无法获得成就感,不知道能搞出什么有意思的东西,那我们就来点

Spring boot接受json赋值给java对象

Spring boot接受json赋值给java对象 新建 模板 小书匠 前言 写这个东西,一方面是我自己在做项目的时候,对json的使用还不是十分的熟悉,对spring boot的使用也不是很熟悉,但是呢,活总是要干的吧.自己就慢慢的摸索,摸出来了.记录一下.自己最近也在看<Spring 实战>,希望早日看完,系统的学习一下spring的知识点 环境 IDEA JDK 1.8 Spring boot 1.5.8 JSON简单介绍 之前看了许多的json的教程,但是呢总是觉得看会了,自己却还是

Spring Boot实践教程:开篇

前言 ??Java项目开发Spring应该是最常被用到的框架了,但是老式的配置方式让人觉得特别的繁琐,虽然可以通过注解去简化xml文件的配置,但是有没有更简单的方式来帮我们完成这些重复性的事情呢?于是Spring Boot就出现了,Spring Boot极大的简化了Spring的应用开发,它采用约定优于配置的方式,让开发人员能够快速的搭建起项目并运行起来. ??我们在项目开发的过程中,总免不了要整合各种框架,类似什么SSM.SSH之类的,这些框架的整合过程是繁琐的,同时又是无聊的,因为大部分情况

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

前言 距离上一篇已经比较久的时间了,项目也是开了个头.并且,由于网上的关于Spring Boot的websocket讲解也比较多.于是我采用了另外的一个通讯框架 t-io 来实现LayIM中的通讯功能.本篇会着重介绍我在研究与开发过程中踩过的坑和比较花费的时间的部分. WebSocket 在研究 t-io 的时候,我已经写过关于t-io框架的一些简单例子分析以及框架中关于 websocket 中的编解码代码分析等,有兴趣的同学可以先看一下.因为 在LayIM项目中我会是用到 Showcase D