Spring:一个Java框架15年的演化

2019 年 2 月 27 日 码农翻身

这篇文章来自于Spring创始人之一Juergen Hoeller在2018年的一次演讲(点击阅读原文查看),我觉得很有意思,又加了点儿料呈现给大家,希望大家能够喜欢。


一切都从这本书开始



这本书的作者就是大名鼎鼎的Spring创始人,Rod Johnson,其实在写这本书之前,Rod已经是一个知名的Java架构师了,还是JSR154专家组成员,负责定义Servlet2.4规范。


在这本书中Rod以其丰富的经验和卓越的洞察力,指出了J2EE的长处和缺点,有理论有代码,说服力极强。


在2002年的圣诞假期,另外一个Java架构师Juergen Hoeller阅读了这本书,如获珍宝,一口气读完,还下载了书中的代码,然后给Rod写了一封信,原文未知,意思就是:


“ 哥们,你这是个好东东啊,书中的那些代码已经是个小框架了,难道你不想把他给产品化,搞成一个开源产品吗? ”


Rod 回复说: “兄弟,我写这本书花了我八九个月时间,我也得赚钱吃饭啊! 不过,如果你要是能保证和我一起投入的话,也许可以搞起来。”


于是两个好基友真的搞起来了,他们俩把代码整理以后,上传到了sourceforge.net上面。


(听说过sourceforge.net的可以举个手,嗯,放下吧,估计和我一样,是35岁以上的程序员了吧。 sourceforge.net这可是当时最大的开源网站,地位如同现在的Github一样。)


上传代码的时候遇到了难题,起个啥名呢?  要知道代码仓库一旦确定就没法改名了。其中还有一个读者在论坛上建议使用Spring, 他们俩立刻爱上了这个名字,于是Spring就诞生了!



Spring 0.9 -> 1.2 



Rod 和 Juergen把大量的时间花在了Spring上面,尽了最大努力搞定一个最小的可行性的版本, 与2003 年6月发布,这就是Spring Framework 0.9。


然后他们再接再厉,在2004年发布了真正的1.0版本。 


这个时候的Spring,主要还是使用现在看来非常笨拙的XML Bean Definitions, 在1.2版本中,已经开始了对注解的支持,例如@Transactional 。 当然你必须使用JDK1. 5才可以。 


注意这是在2004年,这个时候有很多人还在使用JDK 1.4.2 , 这种策略也反应了Spring总是会拥抱新的机会,拥抱新的变化。


当时Java世界最流行的Web框架是Struts , 与此配套的是这么几个热门软件:



Jetty和Tomcat都是Web Container,专门处理Servlet&JSP , Hibernate 负责O/R Mapping , Eclipse还是最热门的IDE。 


Spring呢? Spring有点像一个粘合剂,把Struts,Hibernate等黏合到一起,史称SSH。 


注意:这时候还没有Spring MVC什么事儿。 



第二本书和第三本书



Rod 和 Juergen 合著了另外一本书,叫做《J2EE Development without EJB》



(Juergen : “怎么不把我的头像放上去, 我也是作者啊”) 


从书名就可以看到,这时候,EJB还是很有市场的,要不他们俩怎么会说without EJB呢!


我就是看了这本书以后才迷上了Spring框架。 


到了2005年,第3本书问世,这一本书完全以Spring为中心。这一次,一下子出现了5个作者,反映了Spring 在茁壮成长。


(Rod Johnson站在中间,我看了半天,左二也许就是Juergen 吧)


这5个人,一边开发Spring framework, 一边写书,实在是抓狂,后来他们决定把精力放到软件开发上,以后不再写书了。

别人想写的话他们可以提供支持。 



Spring 2.0 ~ 2.5



2006年发布Spring 2.0 , 2007年发布Spring 2.5 。 


这一阶段,他们不仅仅是闷头做开发,还走出去听取大家的意见,看看大家需要什么功能。 


一个非常重要的功能:基于注解的依赖注入和组件扫描( <context:component-scan>  )出现了,这一下子就解放了码农们,不用辛苦地在XML中做配置了,后来还引发了一番争论:究竟是注解配置好还是XML配置好? 


不仅如此,在Spring MVC中也引入了像@Controller这样的注解,这一下子让Web开发极为方便, Spring MVC开始攻城拔寨。 


2006年,一个叫做Ruby on Rails的框架突然崛起,号称比Java 开发快10倍, 约定重于配置,Don't repeat yourself的思想随着RoR深入人心。 


Java 世界怎能没有应对措施? 用Java语言去写,肯定达不到动态语言的灵活性,于是就用Groovy这个运行在JVM上的语言写了一个类似RoR的框架: Grails。 



Rod 和 Juergen他们的公司原来叫做interface21, 总部在英国,后来获得风投以后改名为SpringSource,搬到了美国, 2008年SpringSource顺势把Grails给收购了, 成功扩大了自己的疆土。


此是的Spring 产品系列看起来像下图, Spring从单一的产品变成了一个生态系统。




Spring 3.0 -> 3. 2



2009年Spring 3.0 正式发布。


这一阶段的重大增强在Spring MVC中对RESTful的支持。 之前的Web层框架主要是Form-based ,也就是说用户提交Form,系统进行处理,渲染生成HTML。 现在RESTful成了非常热门的概念,Spring对它有了完整的支持。


比较厉害的一点是, 在核心组件层次,和web framework 层次,Spring早期(2003,2004年)所选择的那些抽象概念被证明还是有效的,至少是可以演进的,甚至对于新的挑战,新的应用都没有问题 !  


可以演进的模型和架构是非常非常厉害的。


另外也把生态系统中有些外围产品的特性被移到核心框架当中,例如Java Config和Sping Expression Language        

  


这些注解,Config都经历了10年的考验,非常长寿,至今还是主流的使用模型。



收购!收购!收购!



2009年,SpringSource 被VMWare以4.2亿美元收购,不仅如此,VMWare继续收购了开源的消息队列RabbitMQ,开源的缓存Redis, Gemstone等一系列著名软件,他们组成了一个叫做vFabric Application Suite的品牌。


到了2013年, VMWare,还有它的母公司EMC,和通用电气一起又合资建立了一个叫做Pivotal Software的公司,VMWare公司那些应用层的软件,包括Spring,都被转移到了Pivotal。 


2015年,Dell又收购了EMC !


这一连串商业操作确实让人眼花缭乱, 不管如何,Spring创始人Rod和Juergen等人应该获得了非常丰厚的回报。 


2012年7月,Spring创始人Rod Johnson离开了VMWare, 现在他是5个公司的董事会成员:

Neo Technology

Elasticsearch

Atomist

Meteor

Hazelcast



Spring 4.0 ~ 4.3



不管商业操作如何,Spring还是继续发展, 2013年12月, Spring4.0 发布,这个版本开始支持JDK8 , 甚至比JDK8 的GA版本还要早3个月!


2014年出现了一个激动人心的东西: Spring Boot,如果说之前的Grails还是模仿的话, Spring Boot完全是从Spring基础上发展起来的,通过自动的配置和依赖管理,极大地解放了程序员。


Spring Boot内置了Tomcat或Jetty , 一个jar文件就可以部署,这简直就是为微服务量身定做的。


当然,仅仅有Spring Boot还远远不足以实现一个微服务的系统,还需要很多组件来实现这样的功能:


服务的注册和发现

负载均衡

服务的隔离和降级

......

于是,在2015年Spring Cloud 出现了。



Spring 5.0 : 拥抱反应式编程



到目前为止,无论是普通的form-based的MVC,还是Restful风格的Web, 其核心都是Servlet !


Web Container 会维护一个线程池, 当Web请求来了以后,从线程池取一个线程来处理,如果这个请求需要访问数据库,网络,那这个线程就得等着, 这就是所谓同步阻塞的模型。


当请求过多,线程池用光以后,连最基本的请求都无法处理了。为了解决这个问题,Java 世界开始呼唤新的IO模式。


2017年9月发布的Spring 5.0 开始拥抱新的模型:异步非阻塞, 这就是Spring WebFlux。



后记



提出轻量级的J2EE开发,颠覆EJB

使用注解, Java Config

Spring MVC

全面支持RESTful

Spring Boot

Spring Cloud

Spring WebFlux

......


纵观Spring 这10多年的发展,可以说Spring一直在与时俱进,不断面对新挑战,不断推出新产品,这也是它能够屹立于Java后端而不倒的原因吧 !



个人广告时间, 知识星球“码农翻身”特价优惠中,原价128元/年, 优惠价:99元(截止到2月28号)。


星球详细介绍猛戳: 码农翻身知识星球


对于加入知识星球的同学提供特别的福利,即 编程提高群第一季第二季的部分“加餐”视频:


漫谈计算机组成原理和计算机编程语言

程序的机器级表示

漫谈操作系统之虚拟内存

进程和线程

新人在职场

Java 并发编程

如何用 Antlr 实现自定义的简单脚本语言

缓存

BTree 及其在数据库的应用

分布式文件系统 FastDFS


今年会再额外送5个


Web安全

字节码和AOP

Web SSO

微服务入门

漫谈文件系统


相信这些视频就能值回大部分票价了, 想加入的要尽快了,优惠只剩最后两天。

登录查看更多
0

相关内容

【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
58+阅读 · 2020年6月26日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
236+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
261+阅读 · 2020年5月17日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
214+阅读 · 2020年2月21日
资源|Blockchain区块链中文资源阅读列表
专知会员服务
44+阅读 · 2019年11月20日
【课程】伯克利2019全栈深度学习课程(附下载)
专知会员服务
57+阅读 · 2019年10月29日
机器学习相关资源(框架、库、软件)大列表
专知会员服务
40+阅读 · 2019年10月9日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
说说我的老同事,前端大神程劭非
余晟以为
17+阅读 · 2019年1月14日
6大最常用的Java机器学习库一览
AI前线
4+阅读 · 2018年10月9日
各编程领域最好的入门书籍
程序猿
28+阅读 · 2018年7月29日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
2018 程序员必备碎片化学习工具(年度精选)
EGONetworks
4+阅读 · 2017年12月27日
码农日常工具推荐
架构文摘
4+阅读 · 2017年9月26日
【机器学习】推荐13个机器学习框架
产业智能官
8+阅读 · 2017年9月10日
EfficientDet: Scalable and Efficient Object Detection
Arxiv
6+阅读 · 2019年11月20日
Arxiv
4+阅读 · 2019年9月5日
Factor Graph Attention
Arxiv
6+阅读 · 2019年4月11日
VIP会员
相关VIP内容
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
58+阅读 · 2020年6月26日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
236+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
261+阅读 · 2020年5月17日
【2020新书】数据科学:十大Python项目,247页pdf
专知会员服务
214+阅读 · 2020年2月21日
资源|Blockchain区块链中文资源阅读列表
专知会员服务
44+阅读 · 2019年11月20日
【课程】伯克利2019全栈深度学习课程(附下载)
专知会员服务
57+阅读 · 2019年10月29日
机器学习相关资源(框架、库、软件)大列表
专知会员服务
40+阅读 · 2019年10月9日
相关资讯
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
说说我的老同事,前端大神程劭非
余晟以为
17+阅读 · 2019年1月14日
6大最常用的Java机器学习库一览
AI前线
4+阅读 · 2018年10月9日
各编程领域最好的入门书籍
程序猿
28+阅读 · 2018年7月29日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
2018 程序员必备碎片化学习工具(年度精选)
EGONetworks
4+阅读 · 2017年12月27日
码农日常工具推荐
架构文摘
4+阅读 · 2017年9月26日
【机器学习】推荐13个机器学习框架
产业智能官
8+阅读 · 2017年9月10日
Top
微信扫码咨询专知VIP会员