大家好,我是王老狮,今天开始开新坑。作为JAVA程序员,Spring基本上是必备的技能,也是面试经常考核的技能,特别是大厂,Spring源码基本是必问的题目。但是很多同学看到源码就头疼,根本不知道源码该无法下手。今天开始,就带着大家全面剖析下Spring,SpringBoot,以及SpringCloud的源码,欢迎大家来交流。
我们学习一款框架,不仅要学习他的作用以及是如何使用的,更应该了解他的过去,这样有助于我们思考为什么要有这么一款产品,以及他带给我们什么样的价值。可以说,Spring的出现改变了JAVA的开发模式。
要谈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不和现有的解决方案竞争,而是致力于将它们融合在一起。
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 主要具有的特性有:
2013 年 12 月,发布 Spring4.0,对于 Spring4.0 是 Spring 版本历史上的一重大升级。其特性为:
2017 年 9 月,Spring5.0 发布,Spring5.0 特性如下:
今年预计发布Spring6.0版本,我们拭目以待,除此之外还衍生众多子项目,方便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