(一)Spring的由来与发展

这是一个最好的时代,也是一个最坏的时代;
这是一个智慧的年代,这是一个愚蠢的年代;
这是一个信任的时期,这是一个怀疑的时期;
这是一个光明的季节,这是一个黑暗的季节;
这是希望之春,这是失望之冬;
人们面前应有尽有,人们面前一无所有;
人们正踏上天堂之路,人们正走向地狱之门。
                                    ——《双城记》狄更斯

Java从诞生之日到如今已经历时了20多年。它经历过异军突起、风靡全球的时代;它也有过让人不满、饱受诟病的时候;直到现在它仍然牢牢坐在全球开发者使用量第一的位置上。在这样一段丰富多彩的历史中,Java从开始受到质疑到再次走向高峰,Spring框架起到了非常重要的作用。

Java在最初10年辉煌后的痛点

Java从94年诞生之日起,借助于当时它的 语法简单、面向对象、跨平台、安全健壮等特性 迅速得到业内欢迎,很快攀升到使用率👍No1的位置。基于Java实现的各种应用、各种服务、各种框架和第三方工具包开始出现爆炸性增长。虽然,这一方面代表了Java在行业内得到的肯定(当时已经是第一开发语言)与火热,但另一方面也在不断增加程序员开发的复杂度与时间成本、代码的体量也越来越大,这就带来了很多问题。其中最为突出的是如下几个:

  1. 在分层架构中,上层调用者与下层实现者之间形成代码级关联,这无疑增加了设计的耦合度;
  2. 大部分第三方框架通过强迫使用者继承指定父类或实现指定接口,从而导致应用与框架绑定死板,形成“侵入性”编程;
  3. 散布在应用各个模块中的非功能性重复模块,没有得到充分且灵活的复用;

这些问题导致Java在做开发的时候(特别是Web开发)越发显得臃肿繁琐,将其进行“轻量化”成为业内的一致的呼声。为解决这个问题,行内提出了各种各样的解决方式,包括SUN公司也不断在JavaEE平台上做着各式各样的改进、优化、推新,但最终历史选择了“Spring”。

Spring的出现

Spring 框架最开始的部分是由Rod Johnson于2000年为伦敦金融界提供独立咨询业务时写出来的。在《Expert One-On-One J2EE Development Without EJB》一书中,他进一步拓展了他的代码,以阐述“如何让应用程序能以超出当时大众所惯于接受的易用性和稳定性与J2EE平台上的不同组件合作”的观点。

一批自愿拓展Spring框架的程序开发人员组成了团队,2003年2月在Sourceforge上构建了一个项目。在Spring框架上工作了一年之后,这个团队在2004年3月发布了第一个版本(1.0)。这个版本之后,Spring框架在Java社区里变得异常流行,当然这也要部分的归功于它不错的文档功能和详尽的参考文献,特别是对于一个开源项目而言尤其如此。
Spring框架的一个重要设计目标就是更容易地与已有的J2EE(现在称之为JavaEE或JEE)标准和商用工具整合。 简单说来,Spring在最初的目标中(至少Rod大叔一开始是这么说的😊),并不是致力于打造又一个大而全的新框架。而是希望Spring框架就像一个大容器一样,能够快速方便地集成各种应用(牢记:不仅仅是Web应用,就算一个普通的Java应用也可以)中各种现有技术,对它们进行支持,让开发人员在实现过程中感觉就像使用简单JavaBean一样,在必要的时候还能轻松完成同类框架和工具的替换。而Spring达到这一目标的两大关键手段就是:控制反转/依赖注入(IOC/DI),和面向切面编程(AOP)。其中,IOC/DI是Spring最基本的底层;而AOP是Spring强大的亮点。它们也是我们一开始学习Spring的起点。

Spring的发展

在诞生之初,Spring就是为了简化替代日益重量级的企业级Java技术。但随着时间的推移,JavaEE自身也在不断的演化,面向简单JavaBean模型、依赖注入、面向切面也都逐渐融入,这无疑是受到了Spring成功的启发。

在被模仿的同时,Spring并没有停下脚步👣。它继续在其它领域不断发展:移动开发,社交API集成、安全管理、NoSQL数据库、云计算和大数据等等都是它正在涉足和创新的领域,其前景更加广阔,甚至已经形成与传统的JavaEE平台分庭抗礼之势。

我们可以看到Spring已经打造出了一个自己专属的Spring生态帝国(Spring全家桶🍔🍟🍗🥤)。在这里,我们可以找到几乎所有Web开发所需要的一切解决方案,所以Spring是每个Java程序员都必须要掌握学习的重点内容!