概述
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也在提供了初步使用版本,支持模块如下: