Spring漫漫深耕路 - 记在掘金的第一次直播

2020年10月15日,本人有幸参与了掘金技术社区的一次直播活动,做为主讲人与小伙伴们分享了一些关于 Spring 方面的内容。此次分享的内容以概述为主,主要帮小伙伴们理清楚学习 Spring 的思路,以及学完 Spring 框架以后的进一步规划。react

写这篇文章,主要是记录一下当天分享的内容,以及一些后续的复盘等等,帮助没有遇上车的小伙伴们。git

【B站直播回放:www.bilibili.com/video/BV13i…github

Java开发生态中,Spring究竟有多重要

既然是聊 Spring ,那咱仍是要知道它的地位和份量。Spring 的地位想必都已经到 2020 年了,小伙伴们都很是的清楚。面试

Spring使Java变得简单

在 Spring 的官方网站 spring.io 中,一上来咱们看到的就是 Spring 官方对 Spring 的描述:spring

Spring makes Java simple.modern.productive.reactive.cloud-ready.编程

Spring 使 Java 开发变得简单、现代化,而且能够编写生产级别的应用、响应式的应用,而且也支持云应用。json

包括下面主页上也列出了 Spring 能够作的内容:后端

可见,Spring 表明的不只仅是一个框架 / 一个技术,而是一整个生态。缓存

Spring是一个生态

翻开 Spring 官网的工程概览 spring.io/projects ,咱们会发现里面的工程实在是好多好多呀!安全

最顶部的两个表明之做,分别是现阶段最最流行的后端服务搭建基本框架 SpringBoot ,以及它的基底 SpringFramework :

往下看,还有关于数据访问层的 SpringData 、用于解决微服务开发的总体解决方案 SpringCloud 、用于解决权限安全方面的 SpringSecurity 、用于解决 Session 外置的 SpringSession 等等,这些都是 Spring 生态中的一个个解决方案。

Spring的使用范围极广

若是只是人家官方本身吹,那说服力很明显不是很足,咱看看主流的比较受欢迎的开源项目,它们都用了什么底层框架。

翻开码云的开源项目 gitee.com/explore/bac… ,观察这些比较受欢迎的后台管理系统都是用什么搭建的:

可见这些开源项目都是基于 Spring / SpringBoot 搭建的!这足够有说服力了吧,连这些主流的、受欢迎的项目都是用 Spring 搭建的,那就足以说明 Spring 真的足够的强大了。

Spring是面试常客

最后一个点是关于面试,一直以来面试中就容易问到 Spring 这个框架,并且近年来难度有上升趋势,小伙伴们看如下几个问题都能回答多少呢:

  • 如何理解 Spring 中的 IOC ?
  • Bean 的生命周期包括哪些阶段?
  • Spring 如何处理循环依赖?
  • Spring 的事务在什么状况下会失效?
  • DispatcherServlet 的工做流程?

这些问题,在 Spring 的小册,以及 SpringBoot 的小册中,都有相应的解答,小册总结的面试题不少,若是小伙伴们有在准备面试的话,小册会是你备战的一个坚实的依靠。

如何才能全方面的掌握Spring

那既然 Spring 如此的重要,咱们应该如何全方面的去学习、掌握 Spring 这个框架呢?

简单的来说,咱们能够分为 4 个部分来学习:

IOC

IOC 的部分是整个 Spring 框架最强大,同时也是最复杂的部分,这里面包含的知识点实在是太多了,咱能够简单地罗列一下:

  • IOC 的思想及实现方式
    • IOC 的两种实现方式分别是依赖查找、依赖注入
    • 如何实现依赖查找、依赖注入,都有哪些编码实现的方式
  • Bean 的注册、建立、装配等
    • Bean 的类型、做用域
    • Bean 的建立方式、装配方式
    • 组件扫描
  • Bean 与 BeanDefinition
    • Bean 的定义是如何设计的
    • BeanDefinition 如何与 IOC 容器配合建立 bean 实例
  • 事件驱动、资源管理、后置处理器
  • Bean 、IOC 容器的生命周期
  • ......

这些知识点,在 《从 0 开始深刻学习 Spring》的小册中,所有都会讲到,并且难度都是逐层递进的,包括其中涉及到的面试题总结等等。

AOP&事务

Spring 的两大核心,除了 IOC 以外,另一个就是 AOP 了。咱都知道 AOP 的核心底层实现是动态代理,那它是怎么实现的,如何编写 AOP 的切面;以及 Spring 中对于 AOP 的一个实现:事务管理,它又是怎么使用的,如何编程式 / 声明式 / 配置式的添加事务,以及它的底层如何实现事务控制,这都是在 AOP 和事务部分要学习的。

这个部分的内容大概能够划分为以下内容:

  • AOP 与动态代理
    • jdk / Cglib
  • AOP 的实现、应用
    • 日志打印
    • 权限拦截
  • 事务管理
    • 编程式 / 声明式 / 配置式添加事务
    • 事务传播行为
  • AOP & 事务控制底层核心
    • AOP 如何建立代理对象
    • 事务管理器如何控制开启 / 提交 / 回滚事务

Web

大多数人都喜欢把 Spring 跟 SpringMVC 分开来讲,但确切的说,SpringMVC 是 Spring 框架的一部分,而且自打 Spring 5 出现以后,SpringMVC 多了一个孪生兄弟 SpringWebFlux ,因此 SpringMVC 也被称为 SpringWebMvc 了。

一样的,Web 模块中 Spring 也是重拳出击,这部份内容主要围绕如下的一些关键知识点来学习:

  • Spring 整合 Web 工程
  • SpringWebMvc
    • 控制器的编写与使用
    • 参数绑定
    • 数据校验
    • 国际化
    • 拦截器
  • WebMvc 中的核心组件工做机制、流程、原理
    • DispatcherServlet
    • HandlerMapping
    • HandlerAdapter
    • ViewResolver
    • ......

SpringWebFlux 由于用的人还不多,并且理解的难度相对很大,因此这里咱们只是提一下,若是小伙伴已经熟练掌握了 SpringWebMvc ,那能够试着学习一下 WebFlux 的东西。

整合

若是只是由于 Spring 这个框架自己强大的话,还不足以在整个 JavaWeb 的开发界独占鳌头,它优秀且强大的整合第三方技术的能力绝对是不可或缺的一部分。一般来说咱们接触的比较多的、比较知名的技术,几乎都与 Spring 框架进行了整合。

这里面不乏包含咱熟悉的技术:

  • 数据持久层框架:MyBatis 、Hibernate
  • 缓存中间件:Redis 、MongoDB
  • 消息中间件:RabbitMQ 、Kafka
  • 搜索引擎:ElasticSearch 、Solr
  • ......

学习这些技术的时候,必定要记得顺便学习它与 Spring 的整合。

学习的思路

对于 Spring 框架的学习,做者能够提供两种思路:

水平式学习
  • 第一阶段
    • 先学习 Spring 中 IOC 部分相关的基础内容
      • 包括 IOC 的实现方式,依赖注入的方式
      • Bean 的类型、做用域、建立方式、生命周期控制等等
    • 而后学习 AOP 部分的基础内容
      • 复习一下动态代理
      • 学习 xml / 注解的方式编写 AOP 的切面等等
    • 接下来是事务部分的基础
      • Spring 如何整合 jdbc
      • JdbcTemplate 的使用
      • 如何使用编程式事务、声明式事务
    • 最后学习 SpringWebMvc 的一些基础
      • 包括控制器的编写、参数绑定、响应 json 、拦截器等等
    • 等这些基础部分学习完毕后,基本上 Spring 的基础知识你就都掌握了,这些知识能够应对大部分的实际编码场景
  • 后续阶段
    • 依次学习 IOC 、AOP 、事务 、Web 等模块的进阶、高级知识
    • 这种层层递进的方式,能够称其为 “水平式学习”

垂直式学习
  • 第一阶段
    • 仍是先学习 IOC 相关的基础知识
      • IOC 的实现方式,依赖注入的方式
      • Bean 的类型、做用域、建立方式、生命周期控制等等
    • 而后,继续学习 IOC 部分的进阶知识
      • 包括 IOC 容器的设计、思想
      • Bean 的装配、组件扫描
      • 事件驱动
      • 资源管理、资源文件等等
    • 接下来继续学习 IOC 部分的高级内容
      • Bean 、BeanDefinition
      • BeanFactory 、BeanDefinitionRegistry
      • 后置处理器
      • 深刻底层等
    • 这个阶段学习完成以后,能够说,整个 Spring 的 IOC 模块核心知识点,你基本上已经所有掌握了
  • 后续阶段
    • 按照这个顺序继续学习 AOP 、事务 、Web 模块的各个层级的知识
    • 这种分模块学习,每一个模块都是由浅入深的学习思路,能够称其为 “垂直式学习”

两种方法思路任选其一,根据本身的学习风格、思惟和习惯来就好。

不止是学习 Spring ,学习其它框架 / 技术时,这两种思路一样适用。

掌握Spring以后如何做中长期规划

Spring 框架学习完毕以后,接下来的规划也是相当重要的。明确本身目前所处的位置,并针对本身的状况制定中长期的规划,对本身的整个职业生涯的重要性不言而喻。做者在此也只是提一些导向性的建议,帮助小伙伴们理清本身。

  • 若是 Spring 是你的第一个学习的框架 / 刚学完 SSM
    • 那么接下来你最好先停下来,把这部分的知识巩固住,而且找一个实际的项目 / 需求作一下,体会一下项目开发的感受,顺便这个期间你的基础知识也就能获得巩固了
  • 若是 Spring 框架自己已经掌握的不错了
    • 后续的计划能够围绕着 Spring 的生态展开,SpringBoot 是一个很是好的选择,由于 SpringBoot 是彻底构建于 Spring 框架之上,它充分利用了 Spring 底层设计的机制,也扩展了一些新的机制(如自动装配、新的后置处理器等)
  • 若是 Spring 和 SpringBoot 都基本掌握了
    • 那么中长期的规划能够从两种路线出发
    • 要么,继续进攻 SpringCloud 微服务解决方案,了解和实践微服务开发
    • 要么,研究学习主流的开源中间件(Redis 、RabbitMQ 、ElasticSearch 等),扩充技术栈的广度

Q&A

还没毕业的同窗,实习以前须要掌握SpringCloud吗

回答:不须要。

缘由:对于初入职场的小伙伴,公司更看重的是你的基本功,基本功扎实,想必可塑性都不会差。因此,尽量的让你的基础知识掌握得更牢靠吧(JavaSE 、JavaWeb 、基本的框架等)。

AOP在哪些场景下会失效

回答:通常发生在后置处理器的初始化阶段。

原理:可参照小册第 34 章和第 48 章(后续更新)。

JavaSE的源码阅读起来有些吃力,有什么好办法吗

回答:可参考开源项目 learningjdk 。

github.com/kangjianwei…

学习SpringBoot和Cloud以前须要先学习Servlet吗

回答:必须的。

缘由:兄dei,若是你连 HttpServletRequest 和 HttpServletResponse 都搞不明白,学 SpringBoot 开发 Web 场景的功能时,岂不就直接废了?Servlet 方面的知识是 JavaWeb 的基础,SpringWebMvc 是构建在 JavaWeb 之上的,SpringBoot 又是整合 SpringWebMvc 的,因此按照这个依赖关系,Servlet 固然是一个必学项啦,并且是基础的必学项。

框架的高级知识如何能记得更牢靠

回答:多写多用多练。

小伙伴们扪心自问一下,你一开始学习那些框架、知识等等的,发现有这样那样的高级知识,你学会了,哇塞我牛X了,我直接芜湖起飞了!但是,你真的有在实际场景下用过吗?对于咱搞开发的来说,知识不是学了就能记住的,必定要多加练习,这个学习没有捷径,你看到的熟练都是背后有大量付出的。


写在最后

初次参与直播分享,前期准备的也比较有限,不免会出现有些地方的疏漏、或者交流不充分不到位的地方,敬请小伙伴们海涵和指正。小伙伴们能够经过加入掘金直播分享群找到我,或者经过邮箱 LinkedBear@163.com 与我联系。后续有机会的话,我也会继续参加咱掘金的直播,继续与各位小伙伴做有关 Spring 及生态相关的技术分享和交流。

最后,感谢各位小伙伴的捧场,也感谢掘金官方工做人员的辛勤付出,各位都辛苦啦!

相关文章
相关标签/搜索