Spring框架,Spring Boot、Spring IO的历史和源源

概述

Spring框架是在Java开发中广泛使用的框架之一,是SSH中还能持久热门的长青树。在Struts 2被安全漏洞打击的一撅不正,在RESTful、微服务流行的今天,Spring仍然在扛着Java在这些web开发方面的大旗。

Spring框架由大量的模块及其提供的一系列服务构成。其中包括组件容器,用于构建横向关注面向业务的编程支持,安全框架,数据访问框架,Web应用程序框架和测试组件的支持类等。所有这些组件都通过依赖注入架构模式关联在一块。依赖注入(IOC,也称为控制反转)使得设计和测试松散耦合软件组件变得非常方便。目前Spring框架版本的是5.0.4,下一个版本5.05即将发布。

多年以来,Spring框架一直保持持续快速的增长。基本上所Java企业级应用程序开发基础架构中都会包括Spring框架。然而,将所有需要的Spring组件集成和配置颇耗力气。包括在gradle和maven中设置库依赖项,然后使用xml,annotations或java代码配置所需的spring bean。

Spring开发人员也意识了到这是个头疼的问题,希望寻求自动化工具来自动完成这个工作。于是引入了Sprint Boot。

Spring boot采取定制地方法构建Sprint应用。这意味着对于Spring的每个主用例,Spring boot都定义一组默认的组件依赖关系和组件的自动配置。 Spring boot使用一系列的预制启动项来实现这个功能。比如,要构建一个Sprint Web应用程序,你只需添加 spring-boot-starter-web的依赖;要使用Sprint email库,只需添加对spring-boot-starter-mail的依赖。 Spring boot还有一些很酷的功能,例如在应用中嵌入应用服务器(jetty 或者tomcat),基于groovy和健康、度量监控的命令行界面。

Spring boot使Java开发人员能够快速发起一个包含所有必需的Spring组件的新项目。

在本文主要介绍Spring框架和Spring boot发展历史。

Spring框架的历史

起点

2002年10月,Rod Johnson撰写了一本名为《Expert One-on-One J2EE设计和开发》的书。本书由Wrox出版,概括了当时Java企业应用程序开发的现状,指出了Java EE和EJB组件框架中的一些主要缺陷。在这本书中,他提出了一个基于普通Java类和注入依赖的更简单的解决方案。以下是书中提出的一些问题:

将工作流逻辑集中到抽象超类中是反转控制的一个例子。与传统的由类库用户代码调用库代码的方法不同,在这种方法中,超类中的框架代码调用用户代码。反转控制是框架的基础,它倾向于大量使用模板方法模式。

在书中,他展示了如何在不使用EJB的情况下构建高质量,可扩展的在线座位预定程序。为了构建这个程序,他编写了超过30000行的基础结构代码(牛逼)!其中包含了大量可重用的Java的接口和类,例如ApplicationContext和BeanFactory等。由于Java的接口是依赖注入的基本构建块,他将这些类的根包命名为com.interface21。正如罗德后来解释的那样,21这个是指21世纪,寓意对21世纪的展望。

《Expert One-on-One J2EE设计和开发》一炮走红。书中附带的免费基础架构代码都高度可重用,很快一些有眼力见的开发人员就在他们的项目中使用了。 Wrox也为该书提供了源代码和勘误表的网页,也有一个在线论坛做问题讨论。如今16年过去了,这本书和他提出的一些原则仍然还在指导着高质量的Java Web应用程序构建。笔者强烈建议,所有有志于这方面的码农可以搞一份收藏,备用查看,如果有需要的话给虫虫留言。

Spring的诞生

在本书发布后不久,开发者Juergen Hoeller和Yann Caroff说服Rod Johnson基于书上的代码创建一个开源基础框架的项目。 于是在2003年2月左右由Rod,Juergen和Yann一起创建了一个项目,并且Yann为新框架起了一个很诗意的名字"Spring"。寓意着要给处于"冬天"的传统J2EE带来新开始。

Rod Johnson的书以非常详尽,翔实和实用的方式介绍了J2EE的最佳实践。从编码标准,陈规,bean实体,单元测试,设计决策,持久性,缓存,EJB,model-2表示层,视图,验证技术还有性能等方面都有翔实的论述。书中案例是带领大家做个java项目开发的绝佳之旅,从开发现状、制约因子,风险及至最佳决策。它不光是一本教科书,还是一个Java开发的知识库。

2003年6月,Spring 0.9以Apache 2.0许可协议发布。 2004年3月Spring 1.0版发布。实际上在1.0发布之前,Spring就已经得到开发人员的广泛使用。 2004年8月,Rod Johnson,Juergen Hoeller,Keith Donald和Colin Sampaleanu共同创立了interface21,,一家专注于Spring咨询,培训和支持的公司。

Yann Caroff在不久就离开了团队。 Rod Johnson也在2012年离开了Spring团队。Juergen Hoeller则一直是Spring的活跃的开发者。

Spring快速发展

自2004年发布1.0版本以来,Spring框架得到迅速发展。Spring 2.0于2006年10月发布,截止当时,Spring的下载量超过100万。 Spring 2.0具有可扩展的XML配置功能,用于简化XML配置,还支持Java 5,额外的IoC容器扩展点,支持动态语言(如groovy,aop增强功能和新的bean范围)。

2007年11月Interface21公司更名为SpringSource。同时发布了Spring 2.5。 Spring 2.5中的主要新功能包括支持Java 6 和Java EE 5,支持配置注释,支持自动检测和兼容组件的类路径和OSGi兼容bundle。

2007年,SpringSource从benchmark capital获得了1000万美元A轮投资。 SpringSource在2008年通过来accel partners 和 benchmark的B轮投资,筹集了更多的资金。此期间它还收购了多家公司(Covalent, Hyperic, G2One等)。 2009年8月,SpringSource以4.2亿美元被VMWare收购,SpringSource又在几周内收购了cloud foundry,这是一家云PaaS供应商。 2015年,cloud foundry转移到了非营利的cloud foundry基金会。

2009年12月,Spring 3.0发布。 Spring 3.0具有许多重要特性,如模块重组系统,支持Spring表达式语言,基于Java的bean配置(JavaConfig),嵌入式数据库(如HSQL,H2和Derby)支持,模型验证和REST支持,以及对Java EE 6的支持。

2011年和2012年发布了许多3.x系列的小版本。2012年7月,Rod Johnson离开了Spring团队。2013年4月,VMware和EMC通过GE投资创建了一家名为Pivotal的合资企业。所有的Spring项目都转移到了Pivotal。

2013年12月,Pivotal宣布发布Spring框架4.0。 Spring 4.0是Spring框架的一个重大版本升级,包含了对Java 8的全面支持,更高版本的第三方库依赖(groovy 1.8+,ehcache 2.1+,hibernate 3.6+等),Java EE 7的支持,bean定义的groovy DSL,websockets的支持,以及注入bean限定符泛型支持。

2014年至2017年期间发布了许多Spring框架4.x.x版本。

Spring 5.0 GA版本于2017年9月28日发布。Spring 5.0开始支持JDK 8和Java EE 7,同时兼容JDK9。全面支持Servlet 3.1,还引入了一个全新的模块Spring WebFlux用于替代老话的 spring-webmvc;对Kotlin也有了更好的支持。

Spring Boot的历史

2012年10月,Mike Youngstrom在Spring jira中创建了一个功能需求,要求在Spring框架中支持无容器Web应用程序体系结构。他建议通过main方法引导的Spring容器内配置Web容器服务。

这一需求促成了2013年初开始的Spring Boot项目的开发。2014年4月,Spring Boot 1.0.0发布。从那以后,一些Spring Boot小版本开始出现。

Spring Boot 1.1(2014年6月):改进的模板支持,gemfire支持,elasticsearch和apache solr的自动配置。

Spring boot 1.2(2015年3月):升级到servlet 3.1/tomcat 8/jetty 9和spring 4.1,支持banner/jms /SpringBoot Application注释。

Spring boot 1.3(2016年12月):升级到spring4.2,新的spring-boot-devtools,缓存技术的自动配置(ehcache,hazelcast,redis,guava和infinispan)以及完全可执行的jar支持。

Spring boot 1.4(2017年1月):升级到spring 4.3,couchbase/neo4j支持,启动失败分析和RestTemplateBuilder。

Spring boot 1.5(2017年2月):支持kafka /ldap,第三方库升级,放弃对CRaSH支持和执行器日志终端用以动态修改应用程序日志级别。

Spring boot的简便性使java开发人员能够快速大规模地应用于项目。 Spring boot可以说是Java中开发基于RESTful微服务Web应用的最快方法之一。它也非常适合docker容器部署和快速原型设计。

目前Spring boot 最新版本是2.0.0,于2018年3月1日发布,新版本特点有:

基于 Java 8,支持 Java 9;支持 Quartz 调度程序;支持嵌入式 Netty,Tomcat, Undertow 和 Jetty 均已支持 HTTP/2;执行器架构重构,支持 Spring MVC, WebFlux 和 Jersey;对响应式编程提供最大支持;引入对 Kotlin 1.2.x 的支持,并提供了一个 runApplication 函数,用Kotlin 通用的方式启动 Spring Boot 应用程序。

Spring IO和Spring Boot

2014年6月,Spring io 1.0.0发布。 Spring io代表预定义应用类库和依赖关系(包括Spring工程和第三方库)依赖维护平台,Sppring io可以完美的支持Maven和Gradle。这意味着如果你使用特定的Spring IO版本创建项目,则无需配置你所使用的库的版本。请注意,这包括Spring库和大多数流行的第三方库。Spring boot启动器工程也是Spring io的一部分。例如,如果你使用的是spring io 1.0.0,则在添加启动器项目的依赖关系时,不需要指定spring boot版本。它会自动设定它为spring boot 1.1.1.RELEASE。

在概念上spring io由基础层模块和执行层领域特定运行时(DSRs)组成。基础层包括core Spring模块和关联的第三方依赖关系,可确定不会有冲突。执行层提供的DSRs,简化为生产准备的构建、基于JVM的工作负荷等。 Spring boot是Spring IO提供的执行层DSRs之一,还有一个DSRs是Grails。

有两种方法可以用来构建Spring应用程序:使用spring boot和直接使用spring io。

需要注意的是,通常每当新的Spring框架版本发布时,都会伴随着新的Spring boot版本,然后是新的sprint io版本发布。

2015年11月,Spring io 2.0.0发布。版本提供了新的模块和依赖关系,包括Spring Boot 1.3。2016年7月,Spring io团队决定使用按字母顺序的版本方案。 Spring IO使用城市名称为大版本,用一个字母来表示小版本。因此,根据所使用的各个组件,你的应用程序可能需要选择合宜版本。一个新名称发布的,表示一个维护版本发布,你可以在不影响代码的使用。

2016年9月,首个按字母顺序排列和城市命名的Spring io平台版本Athens发布了。它包含sprint boot 1.4和其他第三方库升级。此后,Athens发布了多个服务版本(SR1,SR2,SR3和SR4)。

2017年3月, spring io平台Brussels -SR1发布。它使用最新的spring boot版本1.5.2.RELEASE。

目前最新版本为Brussels-SR7,于2018年1月31日发布,下一个版本Cairo-RC1也在提供了初步使用版本,支持模块如下:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,123评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,031评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,723评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,357评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,412评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,760评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,904评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,672评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,118评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,456评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,599评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,264评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,857评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,731评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,956评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,286评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,465评论 2 348

推荐阅读更多精彩内容