关于 Spring
Spring 发展史、Spring 家族、Pivotal 公司
Spring 发展史
Spring 官网:https://spring.io/
Java 平台分为针对移动应用的 J2ME、针对普通应用的 J2SE,以及针对企业应用的 J2EE 1(三者现在分别称为:Java ME、Java SE 与 Java EE)
随着开发需求日益增长,J2EE 变得越来越复杂,其中编写 EJB 尤甚。
EJB 是什么?—— 企业级 JavaBean(Enterprise JavaBean, EJB,或称 Jakarta Enterprise Beans)是一个用来构筑企业级应用的服务器端可被管理组件2。
2002 年,Rod Johnson2 出版了著名的《Expert One-on-One J2EE Design and Development》,而后又在 2004 年出版了《Expert One-on-One J2EE Development without EJB3》。这两本书对 J2EE 当时存在的各种问题进行了深入剖析,还提出了一套解决方案——Spring Framework(更详细的历史请参看尾注链接3)。
Spring Framework 成型于 2003 年,其 1.0 正式版于 2004 年 3 月 24 日发布。
- 2004 年 03 月,1.0 版发布
- 2006 年 10 月,2.0 版发布
- 2007 年 11 月更名为 SpringSource,同时发布了 Spring 2.5
- 2009 年 12 月,Spring 3.0 发布
- 2013 年 12 月,Pivotal 宣布发布 Spring 框架 4.0
- 2017 年 09 月,Spring 5.0 发布
从一开始,Spring Framework 就没有打算站在 J2EE 的对立面上,而是对它进行补充 —— 不仅是依赖注入(Dependency Injection)和 [[AOP]](Aspect Oriented Programming,面向切面编程),它的大量模块都让 J2EE 应用的开发变得轻松。
后续 EJB 3.x 也开始走轻量化的路线,但 Spring Framework 已成了行业的事实标准。
Spring Framework 的模块化设计得非常出色,用户可以根据实际情况分别引入自己需要的模块。
如今的新工程,几乎都是基于 Spring Boot 进行开发的。
在云计算已成为标配的大背景下,Spring Cloud 也应运而生,为开发云原生 Java 应用提供了很好的支持。
随着 Spring 家族日益壮大,Spring 这个名字的含义也在发生着变化。早期的 Spring 仅指代 Spring Framework,后来基于 Spring Framework 孵化出了大量的项目,Spring 的含义变成了指代 Spring 家族。
Spring 家族
Spring 家族早期就只有少数几个围绕 Spring Framework 的项目。随着各种功能的不断演进,很多模块从 Spring Framework 中脱离出来以独立项目的形式发展,也有些项目从一开始就是在 Spring Framework 的基础上单独开发的。
以下是几个主要成员介绍:
Spring Framework
Spring Framework —— 为现代 Java 企业应用提供了一整套完整的开发与配置模型。它的出现改变了 Java EE 项目的开发方式。
Spring Framework 的功能非常丰富,除了核心的依赖注入、AOP、资源管理等特性,还有完善的数据访问能力,在事务管理、ORM 框架支持等方面都有不错的表现。在 Web 开发方面,Spring MVC 早已取代了 SSH4 组合 8 中的 Struts,成为 Java Web 的主流框架;Spring Framework 5 推出的响应式 Web 框架 Spring WebFlux 也逐步崭露头角。除此之外,Spring Framework 中还有很多非常实用的功能,例如调度任务支持、缓存抽象等。
Spring Framework 的成功与其设计哲学密不可分。在基于 Spring Framework 开发的项目中,开发者拥有很高的灵活度,框架为多种相似功能的第三方组件提供了一致的抽象,选择 Hibernate 还是 MyBatis 真的不是个大问题。Spring Framework 的开发团队对代码质量的要求相当严苛,不仅在 API 的设计上追求精益求精,就连源码生成出来的 JavaDoc 文档读起来都令人赏心悦目。
Spring Framework 是 Spring 家族所有成员的基础。如果学透 Spring,就必须要掌握 Spring Framework 的核心要点和开发实践。
Spring Boot
如果说 Spring Framework 提升了 Java EE 项目的开发体验,那么 Spring Boot 则降低了开发生产级 Spring 应用的门槛。只需轻松几步就能构建一个可以投产的应用,其中包含了健康检查、监控、度量指标、外化配置等生产所需的功能。
Spring Boot 提供的 起步依赖(starter dependency)很好地解决了 Spring 应用的依赖管理困境——按功能组织依赖,降低了开发者的心智负担。此外,Spring Boot 的依赖经过了严格的兼容性测试,开发者再也不用为到底该加什么依赖而犯愁了。
Spring Boot 的另一大亮点是 自动配置。该功能减少了 Spring 应用的配置量,极端情况下甚至可以做到零配置。Spring Boot 可以根据多种条件自动判断是否需要做相应的配置,开发者也可以自行进行微调。Spring 团队曾开发过一个名为 Spring Roo 的项目,其目的就是帮助开发者生成所需的代码和配置。
Spring Boot 如何让开发变得简单?
Spring Boot 对开发效率的提升是全方位的,我们可以简单做一下对比5:
在没有使用 Spring Boot 之前我们开发一个 web 项目需要做哪些工作:
- 配置 web.xml,加载 Spring 和 Spring mvc
- 配置数据库连接、配置 Spring 事务
- 配置加载配置文件的读取,开启注解
- 配置日志文件
- ...
- 配置完成之后部署 tomcat 调试
可能你还需要考虑各个版本的兼容性,jar 包冲突的各种可行性
那么使用 Spring Boot 之后我们需要开发一个 web 项目需要哪些操作呢?
- 登录网址 http://start.spring.io/ 选择对应的组件直接下载
- 导入项目,直接开发
上面的 N 步和下面的 2 步形成巨大的反差,这仅仅只是在开发环境搭建的这个方面
Spring Cloud
随着云计算、微服务等概念的普及,大量应用程序逐步从单体应用发展到了分布式系统,但开发一套分布式系统又谈何容易。大公司有庞大的基础设施团队维护各种中间件,提供各种底层支持,让业务团队能聚焦在业务逻辑上,不用操心基础的分布式系统能力;小公司往往没有大公司的资源,需要自己在各种设施上摸爬滚打,各种踩坑。现在有了 Spring Cloud,一切都变得简单了,无论是谁都可以站在巨人的肩膀上,用简单的代码就可以实现高可靠的分布式系统。
Spring Cloud 构建在 Spring Boot 提供的各种功能之上,例如用到了起步依赖与自动配置。两者在实践中会有一些对应关系,为了避免出现一些兼容性的问题,官方也给出了一个推荐的版本指南。早期的 Spring Cloud 采用伦敦的地铁车站作为 Release Train 号6,按字母顺序从前往后排列,但这的确不便于记忆,所以后来又增加了年份加数字的方式。
Spring Cloud 并不是一个模块,而是一系列模块的集合,它们分别实现了服务发现、配置管理、服务路由、服务熔断、链路追踪等具体的功能。早期的 Spring Cloud 大量借鉴并引入了 Netflix 的最佳实践,Spring Cloud Netflix 就是基于 Netflix 的开源设施进行开发的。随后,在 Spring Cloud 的统一编程模型下,也出现了 Spring Cloud Zookeeper、Spring Cloud Consul 等基于流行开源设施的模块,并在这些设施之上提供服务发现、服务配置等功能。
Spring 、Spring Boot 和 Spring Cloud 的关系
用一组不太合理的包含关系来表达它们之间的关系:
Spring ioc/aop > Spring > Spring Boot > Spring Cloud
Spring Data
Spring Framework 为传统的关系型数据库操作提供了统一的抽象,无论是事务管理还是数据访问模板,使用起来都让人得心应手。随着数据库技术的不断发展,涌现了大量的新技术和新产品,如果把对它们的支持都放入 Spring Framework 中,会导致框架十分臃肿,于是就有了 Spring Data。
Spring Data 与 Spring Cloud 一样包含了相当多的子模块,其中的内容非常丰富,囊括了 JDBC 增强功能、JPA 支持、不同类型的 NoSQL 支持以及对 REST 资源的支持。虽然底层的数据库种类繁多,但 Spring Data 还是在此之上提供了诸如仓库(Repository)和模板(Template)这样的统一抽象,确保了 RDBMS、Redis、MongoDB 等数据库的操作都具有相似的编程模型。
关于 Pivotal 公司
几个关键公司的收购时间点7:
- 1989 年,Rob Mee 创立的咨询公司 Pivotal Labs
- 2003 年,Rod Johnson 和同伴创建了 Spring
- 2003 年,EMC 收购了 VMware 公司
- 2009 年,VMware 收购了 Spring
- 2012 年,EMC 又收购了 Pivotal Labs 公司
- 2013 年,EMC 、 VMware 和收购来的 Pivotal Labs 公司重新组建了新的公司 Pivotal8
- 2015 年,戴尔又并购了 EMC
- 2018 年,戴尔独立上市
Pivatal 公司:
- Pivotal 公司出身高贵,来自几个都不太差钱的世界 500 强公司联合组建而成,其产品非常的高大上,就连我们平时使用的 12306 都使用了他们公司的产品
- Pivotal 公司可谓是大牛云集,公司的开源产品有:Spring 以及 Spring 衍生产品、Web 服务器 Tomcat、缓存中间件 Redis、消息中间件 RabbitMQ、平台即服务的 Cloud Foundry、Greenplum 数据引擎、还有大名鼎鼎的 GemFire(12306 系统解决方案组件之一)
- Pivotal 中国研发中心在中国创建于 2010 年,它的前身是 EMC Greenplum 部门,其团队成员分布在北京和上海两地,目前正致力于以下产品的研发和服务的提供:Pivotal Web Service (PWS), Pivotal Hadoop (PHD), Hawq 和 Greenplum Database (GPDB)
- 毕威拓科技(北京)有限公司(Pivotal 中国公司)2015 年 3 月 1 日正式成立并单独运营
- Pivotal 公司成立之后,于 2014 年发布了 Spring Boot,2015 年发布了 Spring Cloud,2018 年 Pivotal 公司在纽约上市
参考
- 学透 Spring:从入门到项目实战: https://www.ituring.com.cn/book/2910
Footnotes
-
J2EE(Java 2 Platform, Enterprise Edition)是在 1998 年由 Sun 公司推出的。这个规范旨在为创建企业级应用程序提供一个平台,并且它建立在 Java 2 技术的基础之上,强调了与平台无关性、可移植性、安全性和基于Java技术的服务器端中间件标准。 ↩
-
EJB - 维基百科,自由的百科全书: https://zh.wikipedia.org/wiki/EJB ↩
-
Spring 前世今生 | 一叶知秋: https://lushunjian.github.io/blog/2019/01/20/spring的前世今生/ ↩
-
SSH 的三个字母分别指代 Spring Framework、Struts 和 Hibernate。SSH 组合曾风靡一时,不过 Struts 逐步淡出了人们的视野。其中的原因,除了 Spring MVC 的强势崛起,Struts 本身的问题也非常之多,比如 Struts 存在大量的安全漏洞 ↩
-
Spring | 发展历程 - 掘金: https://juejin.cn/post/6844903788940099597 ↩
-
Release Train 可以直译为发布火车。由于现在软件的一个版本发布会涉及不同的产品,条线众多,产品之间需要互相协调,不少公司就引入了火车发版模型 —— 如果多个产品能赶上同一时间发布就“上车”,如果某个产品赶不上就“下车”,不跟这次发布,也不会影响别的产品。Spring Cloud 是个庞大的项目,下面有大量的子项目,所以也采用了类似的发布机制。此外,每个大的 Release Train 里还会分多个小版本,即 Service Release(SR) ↩
-
浅谈 Spring 发展史 - Eolink 用户社区: https://community.eolink.com/d/33338-spring ↩
-
Pivotal - 维基百科,自由的百科全书: https://zh.wikipedia.org/wiki/Pivotal ↩