购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 Spring框架的历史

在Spring框架没有被开发出来时,J2EE 以Sun公司 制定的EJB(Enterprise Java Bean)作为标准。在“遥远”的EJB年代,开发一个EJB需要大量的接口和配置文件,直至EJB 2.0的年代,开发一个EJB还需要配置两个文件,其结果就是配置的工作量比开发的工作量还要大。EJB是运行在EJB容器中的,而Sun公司定义的JSP和Servlet却是运行在Web容器中的,于是可以想象,你需要使用Web容器来调用EJB容器的服务。这就意味着存在以下的弊端:需要增加调用的配置文件才能让Web容器调用EJB容器,与此同时需要开发两个容器,非常多的配置内容和烦琐的规范导致开发效率十分低下,这非常让当时的开发者诟病;Web容器调用EJB容器的服务这种模式,注定了需要通过网络传递,因此性能不佳;测试人员还需要了解许多EJB烦琐的细节,才能进行配置和测试,这样使测试也难以进行。

就在大家诟病EJB的时候,2002年,澳大利亚工程师Rod Johnson(论学历他应该是音乐家,因为他是音乐博士)在其著名的著作 Expert One-on-One J2EE Design and Development 中提出了Spring的概念。按书中的描述,他对Spring框架的描述如下:

We believe that:

J2EE should be easier to use.

It is best to program to interfaces, rather than classes. Spring reduces the complexity cost of using interfaces to zero.

JavaBean offers a great way of configuring applications.

OO design is more important than any implementation technology, such as J2EE.

Checked exceptions are overused in Java. A platform should not force you to catch exceptions you are unlikely to recover from Testability is essential and a platform such as spring should help make your code easier to test.

We aim that:

Spring should be a pleasure to use.

Your application codes should not depend on Spring APIs.

Spring should not compete with good existing solutions, but should foster integration.

2004年,由Rod Johnson主导的Spring项目推出了1.0版本,这彻底地改变了J2EE开发的世界,很快人们就抛弃了繁重的EJB的标准,迅速地投入Spring框架中,于是Spring成为现实中J2EE开发的标准。Spring以强大的 控制反转 (inversion of control,IoC)来管理各类Java资源,从而降低了各种资源的耦合。Spring还提供了极低的侵入性,也就是使用Spring框架开发的编码脱离了Spring API也可以继续使用。Spring的 面向方面的程序设计 (aspect-oriented programming,AOP)通过动态代理技术,允许我们按照约定进行配置编程,进而增强了Bean的功能,并擦除了大量重复的代码,如数据库编程所需的大量try...catch...finally...语句以及数据库事务控制代码逻辑,使得开发者能够更加集中精力于业务开发,而非资源功能性的开发。Spring还整合了许多当时非常流行的框架的模板,如持久层Hibernate的HibernateTemplate模板、iBATIS的SqlMapClientTemplate模板等,极大地融合并简化了当时主流技术的使用,展现出强有力的生命力,并延续至今。

值得一提的是,EJB 3.0的规范也引入了Spring的理念,并整合了Hibernate框架的思想,但是并未能挽回其颓势,主要原因在于EJB 3.0的规范仍然比较死板,而且难以整合其他开源框架。此外,它运行在EJB容器之中,使用起来还是比较困难,性能也不高。

随着技术的发展,2005年Sun公司正式将J2EE更名为Java EE(Java Platform, Enterprise Edition),甲骨文公司在2009年收购了Sun公司,后续宣布放弃Java EE,将其交由Eclipse基金会接手。但是由于版权方面的问题,Java EE这个名称无法保留,最终Eclipse基金会在2018年将Java EE正式更名为Jakarta EE,并延续至今。

2017年9月,Spring已经正式升级到了Spring 5,但是它只能支持Java EE 7/Java EE 8的开发,并不能支持Jakarta EE 9的开发。为了能够支持日益完善的Jakarta EE 9,Spring决定升级到Spring 6。与此同时,Pivotal团队打算基于Spring 6推出Spring Boot 3.x版本,但是这些技术只能基于Java 17+的版本。之所以对Java 17进行支持,一方面是因为Java 17是一个 长期支持 (long term support,LST)版本,另一方面是因为Java 17也能支持目前新流行的编程语言的语法特色。

在Spring早期的开发中,主要使用XML进行配置,很快人们意识到Spring的一个巨大的缺陷——配置太多,Bean、关系数据库、NoSQL等内容都需要使用XML进行配置,导致配置文件异常繁多且臃肿,很多开发者形象地调侃Spring为“配置地狱”。

2006年JDK 5就正式引入了注解,但是功能不够强大,因此注解未能在Java开发中被广泛使用。到了2011年,JDK 7发布,注解功能得到了长足的发展,同时预期JDK 8会更进一步增强注解功能。随着注解功能的增强,用注解取代XML来减少配置,从而改变Spring成为必然。

2012年,Pivotal团队在Java 7发版后开始研究不需要XML配置文件的Spring Boot项目,并在JDK 8发版 后,2014年4月基于Spring 4发布了Spring Boot 1.0.0,随着后续不断地更新和完善,Spring Boot得到了广泛的接受和应用。到了2018年3月,Pivotal团队基于Spring 5发布了Spring Boot 2.0.0,至此Spring Boot成为使用Spring技术的主流方式。本书讨论的Spring Boot 3.x是2022年11月下旬发布的新一代Spring Boot版本,为了迎合新的技术潮流,它只支持Java 17+和Jakarta EE 9,并尽量兼容Jakarta EE 10,因此在应用时需要注意相应的版本问题。 pkc1LQVI1/8L+IpnxS55og8XdePkQB7kda9VEd41UQ+7YGxiDGSCYZTNxLb+64Ok

点击中间区域
呼出菜单
上一章
目录
下一章
×