开门见山,先放结论。

要开始学习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上的一个个具体领域的应用,如下图:

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

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

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

在实践中,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编写。

如下图:

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

Person p = null;

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

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

其中修改了语句:

Person p = new Student();

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

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

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

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

这样,在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。
  4. 入门正在学习java或者即将学习资料包以及BAT面试资料,供大家参考及学习,免费领取方式加QQ群下载:926452303

学习Spring之前要先学习什么?相关推荐

  1. Spring Cloud 微服务学习与实践

    第一章:微服务架构概述 1-1. 系统进化理论概述 在系统架构与设计的实践中,经历了两个阶段,一个阶段是早些年常见的集中式 系统,一个阶段是近年来流行的分布式系统: 集中式系统: 集中式系统也叫单体应 ...

  2. 学习Spring中遇到关于BeanFactory及测试类的问题

    最近在学习Spring,使用的是Spring 5.0.1 学习书本中使用的是4.0 学习书本中使用以下来加载配置文件及设置 Resource resource = new ClassPathResou ...

  3. Spring+SpringMVC+MyBatis深入学习及搭建(十)——MyBatis逆向工程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6973266.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(九)--My ...

  4. spring根据名称获取bean_带你从零开始手写 spring ioc 框架,深入学习 spring 源码

    IoC Ioc 是一款 spring ioc 核心功能简化实现版本,便于学习和理解原理. 创作目的 使用 spring 很长时间,对于 spring 使用非常频繁,实际上对于源码一直没有静下心来学习过 ...

  5. Spring+SpringMVC+MyBatis深入学习及搭建(十一)——SpringMVC架构

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6985816.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十)--My ...

  6. Spring+SpringMVC+MyBatis深入学习及搭建(十七)——SpringMVC拦截器

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7098753.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十六)--S ...

  7. Spring+SpringMVC+MyBatis深入学习及搭建(十四)——SpringMVC和MyBatis整合

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7010363.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十三)--S ...

  8. 我该如何学习spring源码以及解析bean定义的注册

    如何学习spring源码 前言 本文属于spring源码解析的系列文章之一,文章主要是介绍如何学习spring的源码,希望能够最大限度的帮助到有需要的人.文章总体难度不大,但比较繁重,学习时一定要耐住 ...

  9. 动态代理——》AOP —— Spring 中的 AOP||AOP 相关术语||学习 spring 中的 AOP 要明确的事

    AOP 概述 什么是 AOP       AOP:全称是 Aspect Oriented Programming 即:面向切面编程 AOP 的作用及优势 作用: 在程序运行期间,不修改源码对已有方法进 ...

  10. springboot 拦截器 日志_跟武哥一起学习Spring Boot,一份全面详细的学习教程

    SpringBoot现在已经是企业开发项目的标准框架,至少新项目一般都会使用SpringBoot框架,发现有一个SpringBoot的笔记写的非常好,非常全面, 也非常认真,即使你对SpringBoo ...

最新文章

  1. cmake通过命令行构建静态库/动态库
  2. report service常见处理办法
  3. Java经典面试题:一个线程两次调用start()方法会出现什么情况?
  4. find函数matlab_Matlab 数值数据
  5. 东方终焉组审核页可做引导页
  6. 默认帐户生成器帐户来源
  7. SAP License:从SAP顾问面试看职场
  8. spring-boot-maven-plugin多模块install问题解决办法
  9. 图神经网络(一)--综述
  10. [LeetCode]Palindrome Number 推断二进制和十进制是否为回文
  11. 刷题记录 kuangbin带你飞专题五:并查集
  12. 手把手教做无人驾驶算法(二十八)--Tube MPC与MPC区别
  13. [渝粤教育] 中国地质大学 信息资源管理 复习题
  14. opengl导入3DS文件(带纹理)之填坑
  15. 谷歌身份验证器验证码不对怎么回事_兼容谷歌验证器,开源的动态验证码小程序了解一下...
  16. Go 1.16中值得关注的几个变化
  17. 解决Debian7 无线网卡显示为设备未托管问题
  18. 机智云受邀加入中国智能家居产业联盟智慧酒店小组
  19. 3-regexp-golang 爬虫基础正则的使用
  20. 白话机器学习算法理论+实战番外篇之LightGBM

热门文章

  1. 计算机控制的液压提升,一种液压提升监控系统及其在液压提升控制上的运用
  2. 适合做软件官网展示的源码
  3. 原生js用ajax上传图片,关于js ajax上传图片
  4. 鸡兔同笼(C语言实现)
  5. 基于有限元法的转子动力学建模---Timoshenko梁单元有限元建模
  6. 一张图了解大牛直播SDK 1
  7. 基于vue的手机阅读小说类webapp
  8. 【每日新闻】三星折叠手机媒体试用出故障:屏幕失灵 铰链处凸起
  9. 号称最安全的Mega网盘加密方法分析
  10. matlab 画光束等相面,拉盖尔高斯光束_厄米高斯光束MATLAB仿真 - 范文中心