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

大家好,我是王老狮,今天开始开新坑。作为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

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王老狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值