大家好,我是王老狮,今天开始开新坑。作为JAVA程序员,Spring基本上是必备的技能,也是面试经常考核的技能,特别是大厂,Spring源码基本是必问的题目。但是很多同学看到源码就头疼,根本不知道源码该无法下手。今天开始,就带着大家全面剖析下Spring,SpringBoot,以及SpringCloud的源码,欢迎大家来交流。

一、Spring的前世今生

我们学习一款框架,不仅要学习他的作用以及是如何使用的,更应该了解他的过去,这样有助于我们思考为什么要有这么一款产品,以及他带给我们什么样的价值。可以说,Spring的出现改变了JAVA的开发模式。

1、Spring的初衷

要谈Spring的历史,就要先谈J2EE。J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层概念的标准化,但是在实践中并没有获得绝对的成功,因为开发效率,开发难度和实际的性能都令人失望。

Spring最早诞生的初衷未:

1、JAVA EE开发应该更加简单。

2、使用接口而不是使用类,是更好的编程习惯。Spring将使用接口的复杂度几乎降低到了零。

3、为JavaBean提供了一个更好的应用配置框架。

4、更多地强调面向对象的设计,而不是现行的技术如JAVA EE。

5、尽量减少不必要的异常捕捉。

6、使应用程序更加容易测试。

因此Spring的目标:

1、可以令人方便愉快的使用Spring。

2、应用程序代码并不依赖于Spring APIs。

3、Spring不和现有的解决方案竞争,而是致力于将它们融合在一起。

2、Spring 的历史

2004 年 3 月,Spring1.0 发布
2003 年 6 月,Spring Framework 第一次以 Apache 2.0 许可证下发布 0.9 版本
2004 年 3 月,Spring1.0 正式发布,Spring1.0 主要具有的特性有:
对于 Spring1.0 ,其源码只有一个包,在该包中包含了 aop 、beans 、context、 core 、jdbc 、orm 等。对于此时的版本,Spring1.0 仅支持 XML 配置的方式。
2006 年 10 月,Spring2.0 发布,Spring2.0 主要具有的特性有:
对于 2.0 ,Spring 主要增加了对注解的支持,实现了基于注解的配置。 在 2007 年 11 月,发布 Spring2.5,Spring2.5 主要具有的特性有:
添加可扩展的 XML 配置功能,用于简化 XML 配置支持 Java5添加额外的 IOC 容器扩展点,支持动态语言(如groovy ,aop 增强功能和新 的 bean 范围 )
2009 年 12 月,Spring3.0 发布,Spring3.0 主要具有的特性有:

  • 模块重组系统
  • 支持 Spring 表达式语言(Spring Expression)
  • 基于 Java 的 Bean 配置(JavaConfig)
  • 支持嵌入式数据库:HSQL 、H2 等
  • 支持 REST
  • 支持 Java6

2013 年 12 月,发布 Spring4.0,对于 Spring4.0 是 Spring 版本历史上的一重大升级。其特性为:

  • 全面支持 Java8
  • 支持 Lambda 表达式
  • 支持 Java8 的时间和日期 API 支持重复注解
  • 支持 Java8 的Optional 核心容器增强
  • 增加泛型依赖注入 增加 Map 依赖注入
  • 增加 List 依赖注入
  • 支持 lazy 注解配置懒加载
  • 支持Condition 条件注解
  • CGLIB 动态代理增强
  • 支持基于 GroovyDSL 定
  • 义 Bean Web 增强
  • 增强SpringMVC ,基于 Servlet3.0 开发
  • 提供 RestController 注解
  • 提供 AsyncRestTemplate
  • 支持客户端的异步无阻塞请求
  • 增加对 WebSocket 的支持

2017 年 9 月,Spring5.0 发布,Spring5.0 特性如下:

  • 升级到 Java8 、JavaEE7
  • 废弃低版本,将 Java8 、JavaEE 7 作为最低版本要求
  • 兼容 Java9
  • 兼容 JavaEE8
  • 反应式编程模型,增加 WebFlux 模块
  • 升级 SpringMVC ,增加对最新的 API (Jackson 等)的支持
  • 增加函数式编程模式
  • 重构源码,部分功能使用 Lambda 表达实现

今年预计发布Spring6.0版本,我们拭目以待,除此之外还衍生众多子项目,方便Spring项目进行集成

3、Spring 子项目

Spring IO Platform : Spring IO 是可集成的、构建现代化应用的版本平台。Spring IO 是模块化的、企业级的分布式系统,包括一系列依赖,是的开发者仅能对自 己所需的部分进行完全的部署控制。

Spring Boot:Spring 应用快速开发工具,用来简化 Spring 应用开发过程。

Spring XD:Spring XD(eXtreme Date ,极限数据)是 Pivotal 的大数据产品。它 结合了 Spring Boot 和 Grails ,组成 Spring IO 平台的执行部分。

Spring Data:Spring Data 是为了简化构建基于 Spring 框架应用的数据访问实 现,包括非关系数据库、Map- Reduce 框架、云数据服务等;另外,也包含对关 系数据库的访问支持。

Spring Integration:Spring Integration 为企业数据集成提供了各种适配器,可 以通过这些适配器来转换各种消息格式,并帮助 Spring 应用完成与企业应用系统 的集成。

Spring Batch:Spring Batch 是一个轻量级的完整批处理框架,皆在帮助应用 开发者构建一个健壮、高效的企业级批处理应用(这些应用的特点是不需要与用 户交互,重复的操作量大,对于大容量的批量数据处理而言,这些操作往往要求 较高的可靠性)

Spring Security:Spring Security 是一个能够为基于 Spring 的企业应用系统提 供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在 Spring 应用 上下文配置的 bean ,充分利用 Ioc 和 AOP 功能,为应用系统提供声明式的安全 访问控制功能。

Spring Hateoas:Spring Hateoas 是一个用户支持实现超文本驱动的 REST Web 服务的开发库,是 Hateoas 的实现。Hateoas(Hypermedia as the engine of application state)是 REST 架构风格中最复杂的约束,也是构建成熟 REST 服务的核 心。它的重要性在于打破了客户端和服务器之间严格的契约,是的客户端可以更 加智能和自适应。

Spring Social:Spring Social 是 Spring 框架的扩展,用来方便开发 Web 社交应 用程序,可通过该项目来创建与各种社交网站的交互,如 Facebook ,LinkedIn 、 Twitter 等。

Spring AMQP:Spring AMQP 是基于 Spring 框架的 AMQP 消息解决方案,提供 模版化的发送和接收消息的抽象层,提供基于消息驱动的 POJO 。这个项目支持 Java 和.NET 连个版本。Spring Source 旗下的 Rabbit MQ 就是一个开源的基于AMQP 的消息服务器。

Spring for Android:Spring for Android 为 Android 终端开发应用提供 Spring 的 支持,它提供了一个在 Android 应用环境中工作、基于 Java 的 REST 客户端。

Spring Mobile:Spring Mobile 是基于 Spring MVC 构建的,为移动端的服务器 应用开发提供支持。

Spring Web Flow:Spring Web Flow (SWF)一个建立在 Spring MVC 基础上的 Web 页面流引擎。

Spring Web Service:Spring Web Service 是基于 Spring 框架的 Web 服务框架, 主要侧重于基于文档驱动的 Web 服务,提供 SOAP 服务开发,允许通过多种方 式创建 Web 服务。

Spring LDAP:Spring LDAP 是一个用户操作 LDAP 的 Java 框架,类似 Spring JDBC 提供了 JdbcTemplate 方式来操作数据库。这个框架提供了一个 LdapTemplate 操 作模版,可帮助开发人员简化 looking up 、closing contexts 、encoding/decoding、 filters 等操作。

Spring Session: Spring Session 致力于提供一个公共基础设施会话,支持从 任意环境中访问一个会话,在 Web 环境下支持独立于容器的集群会话,支持可 插拔策略来确定 Session ID,WebSocket 活跃的时候可以简单地保持 HttpSession。

Spring Shell: Spring Shell 提供交互式的 Shell ,用户可以简单的基于 Spring 的编程模型来开发命令。

二、源码学习路线图

为了方便大家更快速上手学习Spring源码,将Spring源码学习的顺序列举出来,方便大家参考~

内容参考:百度百科https://baike.baidu.com/item/spring%E6%A1%86%E6%9E%B6/2853288?fr=aladdin

Spring源码深度分析一-Spring前世今生以及源码学习路线图相关推荐

  1. Spring源码深度解析,Spring源码以及Bean的生命周期(五)(附代码示例:)

    五)Bean 的生命周期,创建---初始化---销毁的过程 目录 五)Bean 的生命周期,创建---初始化---销毁的过程 一 ,  指定初始化方法 init-method 方法​ 二 ,指定销毁 ...

  2. Toast源码深度分析

    目录介绍 1.最简单的创建方法 1.1 Toast构造方法 1.2 最简单的创建 1.3 简单改造避免重复创建 1.4 为何会出现内存泄漏 1.5 吐司是系统级别的 2.源码分析 2.1 Toast( ...

  3. 高通(Qualcomm)LK源码深度分析(三)

    本编文章的内容主要是分析 boot/recovery 的启动过程,其中的 boot 就是 android 的kernel, 是整个 android 系统的核心.本文的分析是紧接着 aboot_init ...

  4. 源码深度解析之 Spring IOC

    这篇文章主要讲解 IOC 容器的创建过程,让你对整体有一个全局的认识,文章没有复杂嵌套的 debug 流程,相对来说比较简单. 不 BB,上文章目录. 1. 基础知识 1.1 什么是 Spring I ...

  5. 10天,几万字,源码深度解析之 Spring IOC

    历时 10 天,终于把 Sping 源码系列写完了,该系列一共 5 篇,后续会整理成 PDF 教程,本文是最后一篇. 这篇文章主要讲解 IOC 容器的创建过程,让你对整体有一个全局的认识,文章没有复杂 ...

  6. jdk源码分析书籍 pdf_什么?Spring5 AOP 默认使用Cglib?从现象到源码深度分析

    推荐阅读: 阿里工作十年拿下P8,多亏了这些PDF陪我成长(Spring全家桶+源码解析+Redis实战等)​zhuanlan.zhihu.com 从入门到熟悉,一步一步带你了解 MySQL 中的「索 ...

  7. HashMap 源码深度分析

    HashMap 源码分析 在Map集合中, HashMap 则是最具有代表性的,也是我们最常使用到的 Map 集合.由于 HashMap 底层涉及了很多的知识点,可以比较好的考察一个人的Java的基本 ...

  8. 一 springcloud hystrix源码深度分析

    spring cloud hystrix原理 每周会定时更新spring cloud hystrix 对netflix公司的产品封装实现原理,在这里,你会学到实实际际的干货,如果文中有不正确的地方,还 ...

  9. netty源码深度分析

    https://www.jianshu.com/nb/7981390 转载于:https://www.cnblogs.com/tc310/p/10452630.html

最新文章

  1. 力扣(LeetCode)刷题,简单+中等题(第26期)
  2. LLYFSpy W.I.P
  3. matlab中矩阵的左除右除
  4. 用python-opencv实现简单的车牌定位
  5. 实现带header和footer功能的RecyclerView
  6. 原始套接字与sniffer
  7. 13.  Roman to Integer
  8. 你所阅读的,决定你是什么样的人
  9. 腾讯视频如何设置主设备
  10. asp.net core系列 67 Web压力测试工具WCAT
  11. 【小型JavaFx项目】英汉词典
  12. 安装慢_python安装第三方库太慢,很容易失败报错?教你如何提速
  13. [TCO2013]TrickyInequality
  14. 拓端tecdat|R语言用RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测
  15. WIFI抓包实战篇——使用Kali 同时抓取多个智能家居数据包
  16. pytorch与街景识别学习笔记
  17. 什么是seo外链工具
  18. 如何在Linux上下载MongoDB
  19. 兜了一圈,发现想要的APK在这里有
  20. 电脑视频转换成mp4格式,视频格式转换器转换

热门文章

  1. EO-88遥测信号接收教程
  2. stm32学习记录——继电器
  3. Excel数据录入快捷操作:
  4. 软件系统非功能测试方法,软件测试 非功能测试
  5. 【Python】Python Seaborn搞定线型回归图曲线
  6. java Itextpdf 图片转pdf并压缩下载至浏览器
  7. mac pyenv 报错
  8. [cocos2dx_Lua]动画加速与减速
  9. 由于找不到d3dx9_42.dll,无法继续执行代码。
  10. 并查集(究竟有几个祖先?)