浅谈Spring发展史
1 码农的春天----------Spring来了
Spring官网 :http://www.springframework.org
关于Spring的发展起源要回溯到2002年,当时正是Java EE和EJB大行其道的时候,很多知名公司都是采用此技术方案进行项目开发。这时候有一个美国的小伙子认为 EJB 太过臃肿,并不是所有的项目都需要使用 EJB 这种大型框架,应该会有一种更好的方案来解决这个问题。
他为了证明自己的想法是正确的,在2001年10月写了一本书《Expert One-on-One J2EE》,介绍了当时Java企业应用程序开发的情况,并指出了 Java EE 和 EJB 组件框架中存在的一些主要缺陷。在这本书中,他提出了一个基于普通 Java 类和依赖注入的更简单的解决方案。在书中,他展示了如何在不使用 EJB 的情况下构建高质量、可扩展的在线座位预留系统。为了构建应用程序,他编写了超过 30,000 行的基础结构代码,项目中的根包命名为 com.interface21
,所以人们最初称这套开源框架为 interface21,这就是 Spring 的前身。
这个小伙子是谁呢?他就是大名鼎鼎的 Rod Johnson(下图),Rod Johnson 在悉尼大学不仅获得了计算机学位,同时还获得了音乐学位,更令人吃惊的是在回到软件开发领域之前,他还获得了音乐学的博士学位,反正就是牛逼哄哄的人物。但是现在 Rod Johnson 已经离开了 Spring(2012 年 Rod Johnson 宣布他将要离开 Spring Source ),成为了一个天使投资人,同时也是多个公司的董事,早已走上人生巅峰。
在这本书发布后,一对一的 J2EE 设计和开发一炮而红。这本书免费提供的大部分基础架构代码都是高度可重用的。2003 年 Rod Johnson 和同伴在此框架的基础上开发了一个全新的框架命名为 Spring,据 Rod Johnson 介绍 Spring 是传统 J2EE 新的开始,随后 Spring 发展进入快车道。
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 发布。
2 What Is Spring(Spring 是什么 ) ?
或许想解释清楚 Spring 到底是什么是件很困难的事情。通常, Spring 是指一个用于构造 JAVA 应用程序的轻量级框架,但这句话包含两个有趣的地方。首先,你可以采用 Spring 来构造任何程序,这一 Apache Struts这样的框架不同,你不限定于只编写 WEB 应用。其次,以上解释中的“轻量级”并不意味着类数量很少,或者发行包大小很小,实际上,它指的是 Spring 哲学原理的总称——那就是最少的侵入。 Spring 是轻量级的,意味着你只需对你的程序代码做很少改动 ( 假若有的话 ) ,而获得 Spring 核心带来的好处,你也可以在任何时候选择抛弃 Spring ,你会发现这实在很容易。注意,上面这句话只针对 Spring 核心本身——很多附加的 Spring 组件,比如数据访问,需要与 Spring 框架有相对紧密得多的耦合关系。但是,这些耦合带来的好处显而易见。
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。
3 What is 最少的侵入?
这里解释一下Spring中的侵入式和非侵入式。简单的说,假设我们想把一些业务代码放到一个框架里。侵入式的做法是要求业务代码”知道”框架的代码,表现为业务代码需要继承框架提供的类,才能很好的和框架结合,使用框架带来的便利。非侵入式则不需要业务代码引入框架代码的信息,即无需继承框架提供的类,从编写者的角度来看,察觉不到框架的存在。例如:使用struts的时候,我们需要继承一些struts的类,这时struts侵入到了我的业务代码里。使用spring编写一些业务类的时候不需要继承spring特定的类,通过配置完成依赖注入后就可以使用,此时,spring就没有侵入到我的代码里。侵入式让业务代码产生对框架的依赖,这些代码不能再框架外使用,不利于代码的复用。但是侵入式可以使用户和框架更好的结合,更容易更充分的利用框架提供的功能。非侵入式的代码对框架则没有过多的依赖,可以很方便的迁移到其他地方使用,代码的复用性较好。但是框架和业务代码互动的方式可能就比较复杂。总之,这两种方式各有千秋,各有利弊,主要看实际开发时的权衡选择了。
那么非侵入式的技术体现,即允许在应用系统中自由选择和组装Spring框架的各个功能模块,并且不强制要求应用系统的类必须继承或实现Spring框架的类和接口来达到使用框架的目的。
如何实现非侵入式:
1.引用反射机制,通过动态调用的方式来提供各方面的功能,建立核心组件BeanFactory
2.配合使用Spring框架中的BeanWrapper和BeanFactory组件类最终达到对象的实例创建和属性注入
其实,非侵入式就是不需要继承框架提供的类,而是通过配置完成依赖注入后,就可以使用。允许所开发出来的应用系统能够在不同的环境中自由移植,不需要修改应用系统中的核心代码。
4 Spring的体系结构
Spring是一个分层框架,由七个定义良好的模块组成。Spring模块构建在核心容器之上,核心容器定义了创建,配置,管理bean的方式。
框架图:
(1)核心容器
核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory ,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开 ( 工厂方法 ) 。
(2)Spring上下文
Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。 Spring 上下文包括企业服务,例如JNDI 、 EJB 、电子邮件、国际化、校验和调度功能。
(3)Spring AOP
通过配置管理特性, Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP 。 Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP ,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
(4)Spring DAo
JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。 Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
(5)Spring ORM
Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO 、 Hibernate 和 iBatis SQL Map 。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
(6)Spring Web模块
Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以, Spring 框架支持与 Jakarta Struts 的集成。 Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
(7) Spring MVC框架
MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口, MVC 框架变成为高度可配置的, MVC 容纳了大量视图技术,其中包括 JSP 、 Velocity 、 Tiles 、 iText 和 POI 。
5 Spring和那些巨头公司之间的爱恨情仇
内容好像有点偏了啊,我们今天只谈女人,不谈国事,不不不,是只谈历史,不谈技术。
说到Spring,那就不得不说那个哄哄牛逼的Pivotal 公司,记住了,这是一个”富二代”。首先简单介绍一下 Pivotal 公司:
Pivotal 成立于2013年4月,致力于“改变世界构造软件的方式(We are transforming how the world builds software)”,提供云原生应用开发 PaaS 平台及服务,帮助企业客户采用敏捷软件开发方法论,从而提高软件开发人员工作效率、减少运维成本,实现数字化转型、IT 创新,并最终实现业务创新。
截至目前,财富 100 强中超过三分之一的企业使用 Pivotal 云原生平台。Pivotal 部分大型客户在采用 Pivotal 产品后,开发人员与运营人员比例可提高到 200:1,开发人员专注于编写软件代码时间增长了 50%。
看了简介大家可能会有点犯迷糊,这不是一个 2013 年成立的 IT 服务公司吗,和 2002 年发展起来的 Spring 又是怎么扯上关系的呢?其实呀,要说起 Pivotal 公司的起源要追溯到 1989 年的 Pivotal Labs 实验室。
Pivotal Labs 公司
1989 年,Rob Mee 创立的咨询公司 Pivotal Labs,专注于快速的互联网式软件开发,即敏捷编程。创立 Pivotal Labs 的时候,它还是一家非常小的软件顾问公司,它的主营业务就是与客户合作,帮助客户开发软件。
Pivotal Labs 一直是敏捷开发领域的领导者,为部分硅谷最有影响力的公司塑造了软件开发文化,并树立了良好口碑,其中 Google、Twitter 都曾是 Pivotal Labs 客户。
时间很快到了 2012 年,深受客户喜爱的 Pivotal 终于引起了商用软件巨头 EMC 的关注,EMC 在 2012 年以现金方式收购了 Pivotal 并照单全收了它的 200 名员工。
刚开始的时候,公司并没有发生太大的变化,只是作为新部门成为了 EMC 的一部分,Pivotal Labs 仍然继续像以前样与客户合作。
但是到 2013 年的时候,EMC 突然扔下了一颗重磅炸弹。它将 Pivotal Labs 的核心业务分拆出去,成立了一家名为 Pivotal Software 的新公司。这家新公司的股东是 EMC 、 VMware 和通用电气,之前在 EMC 子公司 VMware 担任首席执行官的马瑞兹出任公司的首席执行官。
EMC 和 VMware 分拆出其 Cloud Foundry、Pivotal Labs、Greenplum 等云计算、大数据资源,GE 投资 1.05 亿美元,成立新公司 Pivotal。新生的 Pivotal 是名副其实的“富二代”,这轮估值高达 10.5 亿美元。
那么EMC和VMware又有什么关联呢?
2003 年 12 月, EMC 公司宣布以 6.35 亿美元收购了 VMware 公司。
EMC 于 1979 年成立于美国麻州 Hopkinton 市,1989 年开始进入企业数据储存市场。二十多年来,EMC 全心投注在各项新的储存技术,已获得了 1,300 个已通过或审核中的储存技术专利。无论是全球外接 RAID 储存系统、网络储存亦或是储存管理软件等储存专业领域,EMC 均是业界公认的领导厂商。
EMC 是全球第六大企业软件公司,全球信息基础架构技术与解决方案的领先开发商与提供商。同时也是美国财富五百强之一,在全世界拥有超过四万二千名员工,在全球 60 个国家或地区拥有分支机构。我们接触比较多就是 EMC 的各种存储产品。
EMC 公司做大 EMC 的秘诀,就是研发与并购双轮驱动,研发与并购的投入占当年营业收入的 22% 左右,并购投入略高于研发。从 2003 年到2 015 年的 12 年间,EMC 总共投入超过 420 亿美元用于研发和收购。其中,206 亿美元用于研发,213 亿美元用于并购,总共并购了 100 多家公司。
Vmware 收购Spring
2009 年是 Spring 企业的一个转折点,VMware 以 4.2 亿美元收购 Spring Source (3.6亿现金外加5800万股份) 。
2012 年 Rod Johnson 宣布他将要离开 Spring Source 。
EMC 又被收购
2015 年的时候,曾经被大量报道 EMC 考虑被子公司 VMware 收购,让人大跌眼镜,竟然可以有这样的骚动作,这是为什么呢?
EMC 在 2003 年斥资 6.25 亿美元收购了 VMware,四年之后,EMC 选择让 VMware 分拆上市,结果独立上市的 VMware 发展越来越好,反观 EMC 的各项业务持续陷入低潮。到 2015 年的时候,VMware 的市值已达到约 370 亿美元,占据了 EMC 总市值的近 75%。
可能各方利益不能达成一致,最终 EMC 却被戴尔(dell)收购。
2015 年 10 月 12 日,戴尔(Dell)和EMC(易安信)公司宣布签署最终协议,戴尔公司与其创始人、主席和首席执行官麦克尔•戴尔,与 MSD Partner 以及银湖资本一起,收购 EMC 公司,交易总额达 670亿 美元,成为科技史上最大并购。
当时业界最关心的云计算软件商 VMware 仍然保持独立上市公司的身份。据悉,EMC 当前持有 VMware 大约 80% 的股权,市值约为 320 亿美元。而戴尔收购 EMC 实际上是项庄舞剑,VMware 才是戴尔收购 EMC 的关键。
并购事件表
上面写的有点乱,大家看完之后也许有点迷糊,在这里重新整理一下这里面几个关键公司的收购时间点:
1989 年,Rob Mee 创立的咨询公司 Pivotal Labs;
2003 年,Rod Johnson 和同伴创建了 Spring;
2003 年,EMC 收购了 VMware 公司;
2009 年,VMware 收购了 Spring ;
2012 年,EMC 又收购了 Pivotal Labs 公司;
2013 年,EMC 、 VMware 和收购来的 Pivotal Labs 公司重新组建了新的公司 Pivotal;
2015 年,戴尔又并购了 EMC;
2018 年,戴尔独立上市
接着说Pivatal公司
上面一系列的商业并购搞的眼花缭乱的,但是大家只要知道 Pivotal 公司出身高贵,来自几个都不太差钱的世界 500 强公司联合组建而成,Pivotal 公司的产品非常的高大上,就连我们平时使用的 12306 都使用了他们公司的产品。
Pivotal 公司可谓是大牛云集,公司的开源产品有:Spring 以及 Spring 衍生产品、Web 服务器 Tomcat、缓存中间件 Redis、消息中间件 RabbitMQ、平台即服务的 Cloud Foundry、Greenplum 数据引擎、还有大名鼎鼎的 GemFire(12306 系统解决方案组件之一)。
这些著名开源产品背后的开发者都在 Pivotal 公司,其研发团队汇集了全球的一流开发者,Spring Boot 为什么如此优秀,或许在这里可以找到一些答案。
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发展史的更多相关文章
- 浅谈Spring中的Quartz配置
浅谈Spring中的Quartz配置 2009-06-26 14:04 樊凯 博客园 字号:T | T Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在 ...
- 浅谈Spring的两种配置容器
浅谈Spring的两种配置容器 原文:https://www.jb51.net/article/126295.htm 更新时间:2017年10月20日 08:44:41 作者:黄小鱼ZZZ ...
- 1.1浅谈Spring(一个叫春的框架)
如今各种Spring框架甚嚣尘上,但是终归还是属于spring的东西.所以在这里,个人谈一谈对spring的认识,笔者觉得掌握spring原理以及spring所涉及到的设计模式对我们具有极大的帮助.我 ...
- 浅谈Spring MVC知识
关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...
- 浅谈spring 声明式事物
此处主要讲讲事物的属性. 事物属性包含了五个方面: 1.传播行为 2.隔离规则 3.回滚规则 4.事物超时 5.是否只读 一.传播行为 事务的第一个方面是传播行为(propagation behavi ...
- 浅谈spring security 403机制
403就是access denied ,就是请求拒绝,因为权限不足 三种权限级别 一.无权限访问 <security:http security="none" pattern ...
- [SSH 3]以网上商城项目浅谈spring配置
导读:在做ITOO项目的时候,就用到了容器+反射,从而运用了依赖注入和依赖查找.如果看过WCF端的配置文件,那么对于这个spring的配置就很容易理解.本篇博客,是对于自己做的一个小项目中所运用到的s ...
- 浅谈Spring(四)
一.Spring+MyBatis整合 spring大大简化了Mybatis的开发步骤. 1.MyBatis的开发要点: mybatis-config.xml配置文件:配置与数据库的链接.mapper文 ...
- 浅谈Spring(三)
一.基础Spring的标准测试 1.导入spring与junit继承的jar 2.引入注解 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfig ...
随机推荐
- 【原】jenkins知识点_凭据(一)
一:凭据 1.目的: 与第三方网站或应用程序进行交互,如代码仓库.云存储系统和服务等 2.操作路径: Jenkins-凭据-系统-全局凭据 3.权限 Jenkins 中保存的凭证可以用于: 任何适用于 ...
- 【PAT甲级】1040 Longest Symmetric String (25 分)(cin.getline(s,1007))
题意: 输入一个包含空格的字符串,输出它的最长回文子串的长度. AAAAAccepted code: #define HAVE_STRUCT_TIMESPEC #include<bits/std ...
- SVN中如何创建共享文件夹
http://wenku.baidu.com/link?url=E8tC1idSdTABc3JzyqGYF8OXakDTIF_yWp8BvFqSX5dgcpkbm8Z57ursZtLpjmQAEABM ...
- Django 中的时区
Django 中的时区 在现实环境中,存在有多个时区.用户之间很有可能存在于不同的时区,并且许多国家都拥有自己的一套夏令时系统.所以如果网站面向的是多个时区用户,只以当前时间为标准开发,便会在时间计算 ...
- [].slice.call(k).filter(function(l) { return l != 0 });
[].slice.call(k).filter(function(l) { return l != 0 }); 将类数组调用数组方法.
- IIS 配置迁移
使用管理员身份运行cmd 应用程序池: # 导出所有应用程序池 %windir%\system32\inetsrv\appcmd list apppool /config /xml > c:\a ...
- sql server alter column identity
上网找 alter column identity 语句,将表中的一个字段调整成自动新增.发现没有. 跟踪了一下sql server 执行这一动作的语句,发现是新建了新表,将字段修改成自动新增,然后将 ...
- uniGUI之上传文件UniFileUploadButton(26)
TUniFileUploadButton主要属性: Filter: 文件类型过滤,有图片image/* audio/* video/*三种过滤 MaxAllowedSize: 设置文件最大上传尺寸 ...
- Practical aspects of deep learning
If your Neural Network model seems to have high variance, what of the following would be promising t ...
- Swift3.0-字符串和字符
一.简介 Swift中的字符串和字符与OC中在表示上并无大的区别,考虑到字符串在平时的开发工作中属于频繁使用的类型,重点需要掌握的内容是String各种操作函数的写法. 二.Swift与OC的区别 三 ...