我是谁
大家好,我叫宁楠,一名撸了多年代码的资深码农,拥有多年软件研发、系统架构经验,历任高级开发工程师 、技术总监。从上大学到现在接触 Java 已有十个年头了,无论是上学期间还是工作之后,身边朋友对我的评价基本是「学习能力强、上手新技术速度快」,这并不是因为我有多聪明,而是需要掌握正确的学习方法。
什么是正确的学习方法?在我看来这个问题要因人而异,我认为好的方法可能并不适用于所有人,每个人都应该找到适合自己的方法。那我的学习方法是什么呢?主要有以下 3 个核心点。
一是我在学习的时候会做深度思考,分析事物的底层原理,并带入到自己当前的学习或工作场景中。比如学到一个新技术,我会思考如果要用它来实现当前的需求,应该怎么做?同时会结合深度思考来做笔记,为了方便查阅,我的笔记都是直接写在书上的,由此,经常会听到借我书看的朋友抱怨:你在书上写那么多字干啥?搞得我都不知道是看你写的字还是看书上的字了,你是没钱买本子吗…
二是学习时一定要以输出结果为目的,我看完书一定要搞出一个成果,可以是一篇技术教程、也可以是一个项目案例。因为只有时刻带着输出结果的思想去学习,才会真正有效,比如写技术教程,首先必须把所有技术点都搞清楚,吸收消化转为自己的东西,然后才能输出。
三是一切以实践为主,我在学习新技术的时候不会把时间花费在理论知识上,首先会大致了解一下技术背景,知道它是做什么的,然后把精力花费在如何使用它,快速实现一个 Demo。这一轮流程走下来,虽说对概念性的内容比较模糊,但是我已经构建起了对技术的直观认知,在此基础上再慢慢打磨细节,就像盖房子,我会先把框架搭起来,再做局部细化,我认为这种方式的效率比较高,至少是适合我的。
一直以来我都在坚持这种学习方法,在学会编程技能的同时也提高了自己深度思考的能力和思维认知,对技术的理解一直都在提升,同时也积攒了很多学习笔记,一开始只是自己记,后来开始通过互联网向外输出,比如写博客、公众号等,逐渐积累了一定的读者和关注度,有了一定的影响力之后,就有各种平台抛出合作的橄榄枝,我当然欣然接受,随后就出版了《Java 零基础实战》一书,也输出了一些知识付费内容,包括视频专栏和图文专栏,比如 GitChat 达人课《案例上手 Spring MVC》。
我为什么要写这门专栏
什么是 Spring 全家桶
作为一名资深 Java 开发者,与 Spring 打了很多年交道了,真心被这个框架所折服,不光是我,任何一个 Java 开发者都应该有这样的体会。毋庸置疑,Spring 框架目前已经成为 Java 开发行业的标准,Spring 的官方理念也是霸气十足:the source for modern java,意为 Spring 是现代 Java 开发的源头。只要是做 Java 开发的,一定或多或少会接触到 Spring,无论是传统企业还是互联网公司的招聘需求上一定会重点要求具备使用 Spring 框架进行开发的能力。
(图片来自 Spring 官网)
Spring 框架从 2002 年诞生至今经过十多年的发展,已经从最初的取代 EJB 这样一个单一功能发展成为一套完整的生态体系,涉及到现代软件开发的各个方面。
核心模块有哪些
作为开发者并不需要掌握 Spring 的所有模块,但是 Spring Framework、Spring Boot、Spring Cloud 这三大模块是所有 Java 开发者必须要掌握的。
Spring Framework 是整个 Spring 生态的基础,各个模块都是基于 Spring Framework 衍生出来的。
Spring Boot 是一个快速开发框架,让开发者可以迅速搭建一套基于 Spring 的应用程序,并且将常用的 Spring 模块以及第三方模块,如 MyBatis、Hibernate 等都做了很好的集成,只需要简单的配置即可使用,不需要任何的 XML 配置文件,真正做到了开箱即用,同时默认支持 JSON 格式的数据,使用 Spring Boot 进行前后端分离开发也非常便捷。
(图片来自 Spring 官网)
Spring Cloud 是一套整合了分布式应用常用模块的框架,使得开发者可以快速实现微服务应用。作为目前非常热门的技术,有关微服务的话题总是在各种场景下被大家讨论,企业的招聘信息中也越来越多地出现对于微服务架构能力的要求。
(图片来自 Spring 官网)
确实,作为当今互联网时代最先进的业务架构解决方案,微服务发展非常迅速,关注点不仅仅放在开发层面,更多的是开发运维逐步一体的思路。
有些读者可能会认为,我现在就是一个初级程序员,把业务逻辑代码写好就可以了,不需要关心架构层面的东西。这种想法过于片面了,不论你现在处于什么阶段,架构方面的东西早晚都要接触,打个比方,当搬砖对你来说已经驾轻就熟了,这时就需要去思考怎么设计房子,也就是从 CRUD 业务操作到软件设计架构的进阶。
怎样提高自己的软件架构能力呢?首先你要具备扎实的基础知识,第二要有足够的项目经验,第三要视野开阔,技术领域的涉猎面要广。整个学习过程周期是比较长的,需要通过反复的实践,发现问题,解决问题来逐步完善你对于架构的理解,需要沉淀才能到达一定高度,很多之前不理解的东西自然就理解了,因此,从长远角度来看,即使你目前只是一个初级开发者,学习微服务也是非常有必要的。
微服务架构的落地框架有很多,对于 Java 开发者而言,当 Spring 框架已经成为事实上的行业标准时,Spring Cloud 作为 Spring 全家桶的重要一员,自然就是大家的首选,通过横向对比也可以得出结论,Spring Cloud 确实是微服务架构中一个十分优越的解决方案。
初学者的困惑
毫无疑问,Spring 全家桶是当前非常流行的主流框架,也是 Java 开发者的必备技能,无论你是初级菜鸟还是有一定经验的老鸟,都应该好好学习 Spring 全家桶的使用。
但遗憾的是目前市面上有关于 Spring 全家桶详细全面且实用的教程比较少,尤其对于初学者来讲,学习成本依旧很高,主要有以下两方面因素。
(1)目前市面上确实有一些不错的 Spring 专栏,但都是分模块讲的,比如只讲 Spring MVC、或只讲 Spring Boot、亦或只讲 Spring Cloud,并没有一个集大成者的系统性专栏来帮助初学者一次性搞定所有核心模块,这对初学者来讲是很不利的。要想学完全套 Spring 技术栈,需要同时购买好几个专栏,这样成本会比较高,我说的并不是经济成本,而是学习成本,为什么呢?因为不同作者的写作风格是大相径庭的,你在学习 Spring Boot 的时候是按照当前作者的风格进行的,那当学习 Spring Cloud 时又是另外一种风格,在不同类型的教学风格中来回切换思路对于初学者来说不是一件轻松的事儿。
(2)很多专栏都侧重于理论讲解,缺乏相应的实战案例,这对于初学者来讲也是挺痛苦的,看似学了很多,真正需要写代码时又不知如何下手,完全没有思路,学了一堆东西却不知道如何应用,那不就背离了我们最初的学习目的了吗?我们学技术就是为了实际应用,提高自己的竞争力,去争取更优质的资源。
我写这门专栏就是希望能帮助初学者解决这两个问题,同时提供一站式服务,将 Spring 全家桶的核心模块一次性全部讲清楚,并结合实战案例让读者能够快速掌握实际开发的能力。上面提到过,以输出为结果导向是最高效的学习方法,希望通过我的这门专栏,让所有需要掌握 Spring 全家桶的读者都能够快速上手,具备使用 Spring 技术栈进行实际开发的能力。
本专栏能为你提供哪些价值
在我看来,一门好的专栏应该具备以下 4 个特点。
提供新知
这个新知并不一定是新的技术,可以是新的框架版本、新的方法、新的思路、新的项目案例等,因此在本专栏中,我们使用的 Spring 全家桶版本都是官方推荐版本(不一定是最新版本,官方推荐的一般都是比较稳定的版本)。
内容全面
本专栏重点讲解 Spring 全家桶最核心的 3 个模块:Spring Framework、Spring Boot、Spring Cloud;在此基础上还包括了 Spring Web MVC、Spring Security、Spring Data JPA、Spring Data Redis、Spring Data MongoDB、MyBatis 等框架,以及 MongoDB 数据库、Redis 数据库、Nginx、前端框架 Layui 的使用;同时还包含 3 个项目实战案例,分别是 Spring + Spring MVC + MyBatis + MySQL 电商项目、Spring MVC + Layui + Spring Data + MongoDB 权限管理系统、Layui + Spring Cloud + MyBatis + MySQL 外卖订餐系统,丰富的内容设置以确保读者可以真正学好 Spring 全家桶技术栈并应用于实战。
容易理解
本专栏内容深入浅出、通俗易懂,我本人是比较反感长篇大论的讲概念,然后没有多少实际干货的教程。我们学习的目的主要在于应用,而不在于研究理论,因此我的写作风格是偏向于实际应用的,让读者快速掌握 Spring 全家桶各个组件的使用,即使是没有接触过 Spring 框架的初学者也完全可以上手。但也不是完全没有门槛,本专栏的学习者必须掌握 Java 核心基础以及 Java Web 开发技能,如果不具备这个条件,建议先学习 Java 基础的内容。
售后服务
知识付费产品的售后服务主要是指读者在购买专栏后,如果在学习上遇到一些问题,能否及时得到解答,这也是读者比较关心的一个问题,如果做不到这一点,恐怕再好的专栏对于初学者来讲也会比较吃力。只要购买了本专栏的读者,都可以加入专属读者交流群,我会在群里为大家解决学习过程中遇到的各种问题,争取做到及时、准确地为读者提供在线答疑,用“保姆式”的服务为读者的学习保驾护航。
上述这 4 个特点是我写作这门专栏的核心框架和指导方向,力图为读者打造一个学习闭环,一站式解决学习中的各种问题,为读者输出最有价值的内容。
认识一下即将要学习的全家桶成员
Spring Framework
Spring Framework 就是我们通常所说的 Spring 框架,它是一个软件设计架构层面的框架,为基于 Java 的企业级应用程序提供了一套标准流程和配置模型,可部署在任何类型的平台上。Spring 优势在于为开发者提供了应用级别的基础结构支持,实现应用层面的解耦合,允许开发者自主选择相关组件,开发者只需专注于业务逻辑的开发,不需要关注特定的部署环境。
Spring Web MVC
Spring Web MVC(官方名称)就是我们通常所说的 Spring MVC,它是 Spring Framework 中的一个模块,是 Spring Framework 在 Web 领域实现 MVC 设计模式的具体方案,主要是基于 DispatcherServer 的前端路由处理和 ViewResolver 视图解析器来简化开发者的工作效率。
Spring Boot
Spring Boot 是目前 Spring 全家桶系列中最流行的一个产品,在 Spring 官网的介绍排在第一位,可见对其重视程度,Spring 官方对 Spring Boot 的描述是“build anything”,翻译过来是构建任何事物,这样一个非常简单的描述将 Spring Boot 的特点展现的淋漓尽致,即通过 Spring Boot 可以快速构建一个基于 Spring 的独立生存级别的应用程序,开发者直接运行程序即可,无需处理各种繁琐的配置文件。简单理解,Spring Boot 就是为了让开发者快速启动和运行 Spring 应用程序而设计的。
Spring Cloud
Spring 官方对 Spring Cloud 的描述是“coordinate anything”,翻译过来是协调任何事物,通过这个描述可以明确 Spring Cloud 并不是为了实现某个业务模块而存在的,它是一个集大成者,将分布式系统开发中常用的模块进行整合,如服务注册、服务发现、配置管理、熔断器、控制总线等,基于 Spring Boot 形成一套框架体系,开箱即用,使得开发者可以快速实现分布式、微服务应用。
Spring Data
Spring Data 是 Spring 提供的持久层产品,主要功能是为应用程序中的数据访问提供统一的开发模型,同时保留不同数据存储的特殊性,并且这套开发模式是基于 Spring 的。根据不同类型的数据存储类型又可分为 Spring Data JDBC、Spring Data JPA、Spring Data Redis、Spring Data MongoDB 等,适用于关系型数据库和非关系型数据库。
Spring Security
Spring Security 是 Spring 提供的一个功能强大的安全框架,为 Java 应用程序提供授权功能,通过定制身份验证来实现对于访问权限的控制,Spring Security 的特点在于扩展性好,可以根据具体的业务需求来实现定制验证服务。
专栏入口:学习者需要具备哪些条件
虽然这门专栏我力图做到通俗易懂、深入浅出,让读者可以更加轻松地掌握所有技能,但是毕竟写的是企业级开发框架专栏,还是需要读者具备一定基础的,比如:
熟练掌握 Java 核心基础
熟练掌握 Java Web 后端开发技术
对 Spring 框架有基本的了解
渴望全面提高自己的编程能力
专栏环境参数
专栏大纲
本专栏内容分为七大部分,共计 68 篇(含开篇词)。
第一部分:Spring 专题(第 2 ~ 7 篇)
万丈高楼平地起,这部分内容将讲解 Spring Framework 的基本概念、组成,为后面的专栏打下基础。
第二部分:Spring MVC 专题(第 8 ~ 20 篇)
这部分内容将详细地讲解 Spring MVC,包括常用模块的使用以及梳理 Spring MVC 的底层实现原理。
第三部分:MyBatis 专题(第 21 ~ 29 篇)
这部分内容将详细讲解主流的 ORMapping 框架 MyBatis,包括常用模块的使用和底层实现原理,作为持久层的实现方案,MyBatis 在实际项目开发中会与 Spring MVC 整合使用。
第四部分:MongoDB 专题(第 30 ~ 34 篇)
这部分内容将详细讲解非关系型数据库 MongoDB 的安装及使用,以及 Spring 全家桶的整合方案 Spring Data MongoDB 的使用,同时完成本套专栏的第 2 个项目案例,使用 Spring MVC + Layui + Spring Data MongoDB 实现权限管理系统。
第五部分:Spring Boot 专题(第 35 ~ 48 篇)
重点突破,这部分内容将详细讲解 Spring 全家桶的重头戏——Spring Boot 核心模块的使用,Spring Boot 作为一个快速构建 Spring 应用的利器,对各种主流框架模块做了很好的集成,开箱即用,这部分内容将为大家详细讲解具体操作。
第六部分:Spring Cloud 专题(第 49 ~ 61 篇)
突破重点,这部分内容将详细讲解 Spring 全家桶最热门的模块 Spring Cloud 的使用,包括服务网关、Ribbon、Feign、Hystrix、Spring Cloud Config 等,涵盖了实际开发中常用的技能点,理论结合实践的方式不仅仅让读者掌握基本概念,同时具备使用 Spring Cloud 搭建微服务架构的能力。
****第七部分:微服务项目实战(第 62 ~ 68 篇)
上手实战,技能升华。有了前面的 Spring Cloud 基础,这部分内容将详细讲解 Spring Cloud 的实战操作,包括 Spring Cloud 的高可用、集群、负载均衡,以及使用 Layui + Spring Cloud + MyBatis + MySQL 的技术选型来完成本套专栏的最终项目实战。
专栏出口:Spring Cloud 微服务项目实战
本套专栏以开发一个基于 Spring Cloud 的分布式微服务项目为输出结果,如果最终能顺利完成,那么恭喜你,本专栏的核心内容已经完全掌握了,如果暂时不能独立完成,那也没关系,继续学习就对了,我会帮助你尽快完成专栏出口目标。
来看看我们要做一个什么样的项目,使用 Layui + Spring Cloud + MyBatis + MySQL 的技术选型完成外卖订餐系统,旨在通过这个项目让大家真正掌握 Spring Cloud 各个组件在实际开发中的使用。
本项目分为客户端和后台管理系统两个界面:
系统架构设计分配出 4 个服务提供者:account、menu、order、user。
接下来分配出 1 个服务消费者,包括客户端的前端页面和后台接口、后台管理系统的前端页面和后台接口,用户 / 管理员直接访问的资源都保存在服务消费者中,然后服务消费者调用 4 个服务提供者对应的接口完成业务逻辑,并通过 Feign 实现负载均衡。
4 个服务提供者和 1 个服务消费者都需要在注册中心进行注册,同时要注册配置中心,提供远程配置信息读取,服务提供者和服务消费者的配置信息保存在 Git 远程仓库,由配置中心负责拉取。
本系统共由 8 个模块组成,包括注册中心、配置中心、Git 仓库配置信息、服务消费者、4 个服务提供者,关系如下图所示。
成果截图:
专栏寄语
希望大家学完本专栏后,可以明确什么是 Spring 全家桶,以及如何使用 Spring 全家桶的核心模块,并且可以开发出实际项目。我们学习一门技术的目的全在于实际应用,对概念的理解一定要透彻但没必要钻牛角尖,重点是知道它是什么、能干什么以及怎么干,这种以实践为主的方式会贯穿整个专栏,我也希望大家能够逐步养成这种编程思想,很多时候当我们真正掌握了一门技术的实际应用并且经过反复实践之后,才能在理论层面上升到一定高度,最重要的是构建自己的体系,这套体系才是你在职场的核心竞争力,预祝学习愉快~
分享交流
我们为本专栏付费读者创建了微信交流群,以方便更有针对性地讨论专栏相关问题。入群方式请到第 5 篇末尾添加小助手的微信号,并注明「全家桶」。
阅读文章过程中有任何疑问随时可以跟其他小伙伴讨论,或者直接向作者提问(作者看到后抽空回复)。你的分享不仅帮助他人,更会提升自己。