我从2016年4月,开始从C++阵营转向java,一开始觉得很自然,并没有什么坎。后面随着慢慢地深入学习,越发发现java的体系庞大。真所谓是:
万事开头易
然后中间难
最后结尾更难
目前所有做java项目,几乎都必须用到spring技术框架,对spring框架的了解对自己的技术提升、找工作、或者是长期的职业发展道路都至关重要。确定了这一点后,我开始查找spring相关的书籍,最终找到评价还不错的王福强的《spring揭秘》,然后开始自己的spring之旅。
0x01 Spring诞生背景
早期的J2EE平台推出的EJB规范,是为了解决CORBA等分布式架构的不足。但随着时间推移和技术发展,EJB也逐渐暴露各种形式的不足,无论是性能,还是使用上的晦涩难懂,还是笨重的框架体系,都让EJB的使用者感到失望。EJB就像是重装骑兵,代价高昂,自身兵种限制太多,发挥作用的场景有限。
于是,一场技术革命在所难免,而燃气这场革命的星星之火,就是Spring。Spring倡导一切从实际出发,以实用的态度来选择适合当前开发场景的解决方案。
Spring 在起源可以回溯到 Rod Johnson 编写的“ Expert One-to-One J2EE Design and Development ”一书 (Wrox , 2002) 。在这本书中, Rod 展示了他的 interface21 框架,他为自己的应用编写了这一框架。这一框架被发布到开源世界后,组成了现在我们所知的 Spring 框架的基础。 Spring 在早期的 beta 和发布备选版本阶段进行得很迅速,第一个正式版本 1.0 在 2004 年 3 月 24 日 发布。从开始到现在,历经16年的演变,目前已经去到Spring 5了。
官网:http://www.springframework.org
技术是发展的,但思想是延续的,当我们借助Spring之船飞渡波澜不惊的水面亦或闯过惊涛骇浪,不要忘记,或许某天我们会踏上另一条更好的船舶,但Spring之船带给我们的思想,却始终陪伴着我们,激励也好,鞭策也善......
0x02 Spring框架概述
Spring框架所倡导的基于POJO(Plain Old Java Object,简单Java对象)的轻量级开发理念,就是从实际出发,立足于最基础的POJO。我们把POJO对象类比为人类或者是在地球生态生存的动植物,Spring框架就好像那包裹地球的大气层一样,为构筑应用的POJO提供了各种服务,进而创造了一套适宜用POJO进行轻量级开发的环境。
Spring框架为POJO提供的各种服务共同组成了Spring的生命之树,如图所示。
组成整个Spring框架的各种服务实现被划分到了多个相互独立却又相互依赖的模块当中,这些模块组成了Spring生命之树的枝和干,说白了也就是它们组成了Spring框架的核心骨架。抓住了这副骨架,也就抓住了Spring框架的学习主线。
我们把Spring的生命之树理一下,分为一个主树干和三个分支:
主树干:
整个Spring框架构建在Core核心模块之上,它是整个框架的基础。在该模块中,Spring为我们提供了一个IoC容器(IoC Container)实现,用于帮助我们以依赖注入的方式管理对象之间的依赖关系。对Spring的IoC容器的介绍将成为我们此次Spring之旅的第一站。除此之外,Core核心模块中还包括框架内部使用的各种工具类。
左分支
沿着Spring生命之树往上左序遍历,我们将来到AOP模块。该模块提供了一个轻便但功能强大的AOP框架,让我们可以以AOP的形式增强各POJO的能力,进而补足OOP/OOSD之缺憾。Spring的AOP框架符合AOP Alliance规范,采用Proxy模式构建,与IoC容器相结合,可以充分显示出Spring AOP的强大威力。我们将在了解了Spring的IoC容器的基础上,详细讲述Spring AOP这一部分。
继续上行,Spring框架在Core核心模块和AOP模块的基础上,为我们提供了完备的数据访问和务管理的抽象和集成服务。在数据访问支持方面,Spring对JDBC API的最佳实践极大地简化了该API的使用。除此之外,Spring框架为各种当前业界流行的ORM产品,比如Hibernate、iBATIS、Toplink、JPA等提供了形式统一的集成支持。Spring框架中的事务管理抽象层是Spring AOP的最佳实践,它直接构建在Spring AOP的基础之上,为我们提供了编程式事务管理和声明式事务管理的完备支持。这些服务极大地简化了日常应用开发过程中的数据访问和事务管理工作。在学习完这两部分内容之后,相信读者将会有切身的体会。
中间分支
为了简化各种Java EE服务(像JNDI、JMS以及JavaMail等)的使用,Spring框架为我们提供了针对这些Java EE服务的集成服务。在Spring的帮助下,这些Java EE服务现在都变得不再烦琐难用。因为相关的Java EE服务较多,我们将会选择合适的几种介绍Spring框架给予它们的支持。
右分支
最后要提到的就是Web模块。在该模块中,Spring框架提供了一套自己的Web MVC框架,职责分明的角色划分让这套框架看起来十分地“醒目”。我们将为Spring的Web MVC框架单独开辟一块“领地”进行讲解。在那一部分中,读者可以充分领略Web MVC框架的魅力。Spring的Portlet MVC构建在Spring Web MVC之上,延续了Spring Web MVC的一贯风格。
就像一棵树必须依赖强大的根基才能生长繁盛一样,Spring框架内的各个模块也是如此。理论上来说,上层的模块需要依赖下层的模块才能正常工作,这就是为什么说这些模块是相互依赖的。不过,近乎处于同一水平线的各个模块之间却可以认为是相互独立的,彼此之间没什么瓜葛。从这个角度看,这些模块之间的相互独立一说也是成立的。
以上就是对整个Spring框架的总体介绍。
0x03 Spring大观园
在开始愉快的Spring旅程之前,我想带大家先逛一逛“Spring大观园”,这样,大家就会发现即将开始的Spring之旅更加值得期待。
Spring大观园中有一棵参天大树,它得以茁壮成长,主要因为它有一个好的根基,那就是Spring框架。在Spring框架的基础上,Spring家族人丁开始兴旺,不断涌现出一个又一个引人注目的家族成员,
包括但不限于:
- Spring Web Flow(SWF)
- Spring Framework;
- Spring Security(原来的Acegi);
- Spring Web Flow;
- Spring Web Services;
- Spring Dynamic Modules for the OSGi Service Platform;
- Spring Batch;
- Pitchfork(http://www.springsource.com/pitchfork);
- AspectJ(http://www.eclipse.org/aspectj/);
- Spring IDE;
- Spring .NET;
- Spring LDAP;
- Spring Rich Client;
- Spring Integration。
小结:
本文首先对Spring框架得以迅速崛起的背景做了简短介绍,然后带领读者从总体上了解了Spring框架的构成。最后粗略列举了Spring体系的成员。在开启Spring之旅之前,先要记住历史和整体的框架,后面再慢慢填充知识点。