学习Spring之前要先学习什么?

2023-05-16

转载于:https://zhuanlan.zhihu.com/p/64001753

开门见山,先放结论。

要开始学习Spring(以IOC和Spring MVC为核心),只需要做好以下准备即可:

  1. 《Java核心技术》前6章。
  2. Java反射原理(选学)。
  3. Servlet。

而想理解上面的结论,则首先必须理解Spring是干什么的。

打开Spring的官方网站,点击projects页面,你会看到一个偌大的结构图。其中列出许多项目,包括:Spring Boot、Spring Cloud 、Spring Data…。对初学来说,乍一看着实吓一跳,完全不知道从何下手。

但透过表现看本质。无论是Spring Data,还是Spring Cloud,都是建立在Spring Framework上的一个个具体领域的应用,如下图:

img

在Spring Framwork中,包含了Spring体系的核心机制及应用,包括IOC、AOP,SpringMVC、Data Access等。而且,即使在Spring Framework内部,各个功能之间也不是水平的,而是存在依赖关系的。

其中最底层,最核心的概念有两个:IOC和AOP。两者之间,尤以IOC为重。

因此,把上图中的Spring Framework勾画再详细点就是这样:

img

在实践中,Spring全家桶中使用最广泛就是IOC和Spring MVC。从上图中,我们也可以看到,Spring MVC是依赖于IOC的。因此要学习Spring MVC,就必须先学习IOC。

而在公司的内部培训,我都会有意把IOC 和SpringMVC完全独立起来进行,因为并不是所有的工程师(例如测试工程师)都对SpringMVC有需求。

到这里,思路就清晰了。如果要学习Spring,必须掌握的就是IOC。因此,所谓的Spring前置知识,某种意义上,就是Spring IOC的前置知识。

然后,我们再来简单讲解下IOC的概念。

对初学者来说,初听到IOC,会觉得特别高大上。但如果真掰开讲明白,你就会发现其实特别简单。

为了便于理解,我用一个例子的说明。

这里有一个应用,包含两个Jar包,一个是myApp.jar,一个是lib.jar。其中myApp.jar包含了程序的主逻辑,由程序员A编写。lib.jar中定义了一个接口,和该接口的实现类,由程序员员B编写。

如下图:

img

在lib.jar中,有一个接口Person,两个实现类Student、Teacher。在myApp.jar,通过代码

Person p = null

从而导致myApp.jar依赖于lib.jar。但因为语句Person p只是做了定义,而没有实际赋值。这时候我们就称myApp.jar仅依赖于lib.jar(通过接口Person),但并没有实现“注入”。

然后,我们把程序进一步修改下,如图:

img

其中修改了语句:

Person p = new Student();

这样,MyApp.jar就把Student的实例“注入”到了对象p中,也就是说,通过new关键字创建对象,这就是最常见的依赖注入方法。

但这种写法有一个很大的缺点,那就是因为myApp.jar不仅依赖于Person接口,还依赖于具体的实现类Student,这是一种明显的强耦合。而如果哪天myApp.jar不想使用Student了,而想使用Teacher,那么程序员就不得不回过头来修改myApp.jar的代码。

而在实际应用中,myApp.jar中往往包含了程序主流程。而主流程一旦完成,就应该保持相对稳定。如果有改变,也应该通过扩展的方式。这也就是架构设计中著名的“开关原则”,即主业务对修改关闭,对扩展开放。而使用Spring就可以达到这样的目的。

下面我们就引入Spring IOC机制,把代码修改下。如图:

img

这样,在myApp.jar包中,就把对Person对象的具体注入从代码中移除,代之在spring.xml文件中定义。任何时候,只要修改Spring.xml的配置,就能改变myApp.jar中具体Person对象的注入。从而保证了“开关原则”。

而上面的整个过程,就是通过Spring框架中的IOC机制来实现的。

从中,你也能体察到Spring框架为什么对企业级程序这么重要性。因为企业级程序必然是复杂的,而要解决复杂度的前提就是解耦。可以说,没有解耦,所有企业级应用都会崩溃在千丝万缕的业务逻辑中。

看到这里,你可能已经发现,对Spring的核心概念IOC来说,并没有涉及任何高深的Java语法,最多也就是接口和抽象类。因此学习Spring IOC,参考《Java核心技术》,只要学到前6章就可以了。

因为Spring IOC的核心机制是建立在Java“反射”基础上的。因此,如果你有兴趣继续探究Spring IOC的核心原理,就有必要提前学习下Java与反射相关的概念。

再说下Spring中另一个最常用的功能Spring MVC。

Spring MVC的运行时建立在两个技术基础上:IOC和Servlet。如果不懂IOC,就搞不明不白Spring MVC是如何配置的。如果不懂Servlet,则就搞不理解Spring是如何注入及拦截Servlet消息的。而之后一旦Spring MVC在运行中出了问题,则必然会茫然不知所措。

虽然Spring MVC中的V(view),最常见的输出目标是JSP页面。但因为现代的企业应用越来越倾向于前后端分离,后端系统只负责输出REST接口。因此在Spring MVC框架中,View这一层就没有存在的必要,学习JSP也就没有价值了。

最后,再总结一下学习Spring(以IOC和Spring MVC为核心)必备的前置知识:

  1. 《Java核心技术》前6章。
  2. Java反射原理(选学)。
  3. Servlet。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学习Spring之前要先学习什么? 的相关文章

随机推荐

  • Pillow(PIL)入门教程(非常详细)

    文章目录 相关资源 教程特点读者 amp 阅读条件 Pillow是什么Pillow版本支持Pillow库特点1 支持广泛的文件格式2 提供了丰富的功能3 配合GUI工具使用 Pillow的下载与安装pip包管理器安装二进制包安装Anacon
  • Tkinter教程

    文章目录 Tkinter教程 xff08 非常详细 xff09 教程特点阅读条件 GUI是什么GUI发展史GUI应用领域GUI的优势GUI开发工具 Tkinter是什么第一个Tkinter程序1 主窗口设置2 添加文本3 添加按钮4 独立运
  • 成功解决卡巴斯基6莫名其妙自动关闭的问题

    卡巴斯基6确实是个不错的杀毒工具 xff0c 但是安装好后 xff0c 会有个特别烦人的问题 xff0c 老是会提示错误 xff0c 然后自动关闭 xff0c 在网上查了一下 xff0c 终于找到了解决方案 解决步骤如下 xff1a 1 进
  • Tcl和Tk教程

    在Python Tkinter中 xff0c 重新了解到TCL和Tk 想起之前在做分子动力学模拟的时候 xff0c 有用到一个软件 xff0c 其命令行好像就是支持Tcl脚本 xff0c 当时对CS没那么了解 xff0c 所以也就没有深入了
  • Gromacs安装教程及一些思考

    写这篇博客目的当然不是只安装一下GROMAC xff0c 而是想借这个机会思考一下认知的问题 想起来刚上研究生的时候 xff0c 要在Linux服务器上安装这个软件 xff0c 当时费了好大劲 xff0c 各种求助师兄 xff0c 虽然安装
  • 如何高效地学习开源项目

    转载于 xff1a https time geekbang org column article 10022 你好 xff0c 我是华仔 今天这期 特别放送 xff0c 我想和你聊聊如何高效地学习开源项目 xff0c 一方面澄清开源项目学习
  • 52个数据可视化图表鉴赏

    文章目录 1 弧线图2 面积图3 箭头图4 条形图5 布林线指标6 箱线图7 气泡地图8 子弹图9 凹凸图10 日历图11 烛台图12 卡通图13 弦图14 分级统计图15 组合图表16 连接地图17 控制图18 南丁格尔玫瑰图19 交叉表
  • 【程序员学理财】不同产业的市场规模

    程序员学理财 不同产业的市场规模 先来了解一些常识 三大产业 第一产业主要指生产食材以及其它一些生物材料的产业 xff0c 包括种植业 林业 畜牧业 水产养殖业等直接以自然物为生产对象的产业 xff08 泛指农业 xff09 第二产业主要指
  • 【程序员学理财】有哪些普通人应该知道的经济学常识?

    文章目录 一 前言二 宏观经济学1 名词定义2 主要内容 三 微观经济学1 名词定义2 研究内容3 对比区别 四 降息降准是什么意思 xff1f 五 一些常用术语1 沉没成本2 边际成本 一 前言 每天我们都在跟 经济 打交道 xff0c
  • 【程序员学理财】汽车行业、手机行业简单了解

    汽车行业 本文章不是专业的解读 xff0c 只是为了让自己对汽车行业建立一个大体的认知 先简单看两个新闻 xff1a 2021年销量出炉 xff0c 中国车企卷翻了 才一年 xff0c 智能车就不再是新势力专利 xff01 当然上面这些是从
  • 【LeetCode刷题日记】1996. 游戏中弱角色的数量

    题目 你正在参加一个多角色游戏 xff0c 每个角色都有两个主要属性 xff1a 攻击 和 防御 给你一个二维整数数组 properties xff0c 其中 properties i 61 attacki defensei 表示游戏中第
  • LEETCODE 编程训练

    转载于 xff1a https coolshell cn articles 12052 html Leetcode这个网站上的题都是一些经典的公司用来面试应聘者的面试题 xff0c 很多人通过刷这些题来应聘一些喜欢面试算法的公司 xff0c
  • 【程序员学理财】零和博弈和对股市的一些了解

    一 零和博弈 零和博弈 xff08 zero sum game xff09 xff0c 又称零和游戏 xff0c 与非零和博弈相对 xff0c 是博弈论的一个概念 xff0c 属非合作博弈 它是指参与博弈的各方 xff0c 在严格竞争下 x
  • C++11新特性之十:enable_shared_from_this

    enable shared from this是一个模板类 xff0c 定义于头文件 lt memory gt xff0c 其原型为 xff1a template lt class T gt class enable shared from
  • 【程序员学理财】曼昆:经济学十大原理,你都了解吗?

    经济学十大原理是哈佛大学经济学教授格里高利 曼昆在其著作 经济学原理 中提出 xff0c 通俗易懂 xff0c 是很多高校经济学考研的指定参考书 很多人觉得经济学一听就是高大上 xff0c 非常深奥 xff0c 其实并不是的 xff0c 今
  • 2022年java学习路线总结

    直接放两个非常好的文章 xff0c 链接如下 xff1a 2021年Java后端开发学习路线 xff08 建议收藏 xff01 xff09 Java后端学习路线图 xff0c 你真的只需要这一张 xff01 最后放一段守护石的 xff1a
  • web服务器与浏览器之间的网络通信过程

    浏览器与web服务器的交互过程 1 浏览器与web服务器的通信原理概述 网络编程 xff08 一 xff09 浅析web服务器与浏览器的实现原理
  • Tomcat部署Web项目的几种方法

    tomcat 部署web项目的四种方法 Tomcat部署Web项目的3种方式
  • 心跳机制详解

    心跳机制 心跳机制详解 什么是TCP心跳机制
  • 学习Spring之前要先学习什么?

    转载于 xff1a https zhuanlan zhihu com p 64001753 开门见山 xff0c 先放结论 要开始学习Spring xff08 以IOC和Spring MVC为核心 xff09 xff0c 只需要做好以下准备