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

文章图片

文章图片

文章图片

文章图片

文章图片
这篇文章来自于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有点像一个粘合剂 , 把StrutsHibernate等黏合到一起 , 史称SSH 。
注意:这时候还没有Spring MVC什么事儿 。
第二本书和第三本书
【华为|Spring:一个Java框架15年的演化】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.02007年发布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早期(20032004年)所选择的那些抽象概念被证明还是有效的 , 至少是可以演进的 , 甚至对于新的挑战 , 新的应用都没有问题 !
可以演进的模型和架构是非常非常厉害的 。
另外也把生态系统中有些外围产品的特性被移到核心框架当中 , 例如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后端而不倒的原因吧 !
推荐阅读
- SUV|美国再拉黑38家华为子公司!升级打压华为获取商用芯片
- 巴西天才初绽放!维尼修斯会成为银河战舰的下一个巨星吗?
- 周星驰|不会再出现下一个周星驰
- 特朗普|特朗普:将赦免“非常重要”的一个人,但不是斯诺登或弗林
- 徐俊|高考遇洪水,交警铁骑送 一个景德镇考生的“国宾待遇”
- 情感冷金葵说美食|让黄渤、宋祖儿泪奔的80岁奶奶:一辈子这么长,只爱一个人值吗?
- 美将38家华为子公司列入实体清单|美将38家华为子公司列入实体清单 中国已别无选择
- 漏洞|华为称继续向预装Google Play手机提供更新;Mac纳入苹果独立维修商维修范围;三星智能手机生产
- 美将38家华为子公司列入实体清单|美将38家华为子公司列入实体清单,限制它们获得某些“敏感技术”
- 轻风细雨|一个家庭走向兴旺的三个征兆,有一个,就很了不起!
