第1章
Spring的设计理念和整体架构
横看成岭侧成峰,远近高低各不同。
不识庐山真面目,只缘身在此山中。
—【宋】苏轼《题西林壁》
本章内容

  • Spring的各个子项目
  • Spring的设计目标
  • Spring的整体架构
  • Spring的应用场景

1.1 Spring的各个子项目
打开Spring社区网站http://www.springsource.org, 我们可以看到围绕Spring核心构建出的一个丰富的平台生态系统。在这个平台生态系统中,除了Spring本身,还有许多值得注意的子项目。对Spring应用开发者来说,了解这些子项目,可以更好地使用Spring,或者说,可以通过阅读这些子项目的实现代码,更深入地了解Spring的设计架构和实现原理。这里将会对Spring的各个子项目进行简要的介绍。首先,在SpringSource的官方社区网站中单击Project链接,这时就可以看到Projects下拉列表中列出的各个子项目的项目链接,如图1-1所示。




spring项目建类 spring子项目_spring项目建类



下面对Spring的主要子项目情况进行简要介绍,帮助读者熟悉Spring的整个生态系统的情况。
q Spring Framework (Core):这是我们熟知的Spring项目的核心。Spring Framework (Core)中包含了一系列IoC容器的设计,提供了依赖反转模式的实现;同时,还集成了AOP功能;另外,在Spring Framework (Core)中,还包含了其他Spring的基本模块,比如MVC、JDBC、事务处理模块的实现。这些模块的详细设计和实现,会在本书后续章节中详细阐述。
q Spring Web Flow:原先的Spring Web Flow是一个建立在Spring MVC基础上的Web工作流引擎。随着其自身项目的发展,Web Flow比原来更为丰富,Spring Web Flow定义了一种特定的语言来描述工作流,同时高级的工作流控制器引擎可以管理会话状态,支持AJAX来构建丰富的客户端体验,并且提供对JSF的支持。如图1-2所示是Spring Web Flow的架构图,通过这个图,我们可以了解到,Spring Web Flow实际上是构建在Spring MVC基础上的,是相对于Spring Framework (Core)独立发展的。


spring项目建类 spring子项目_前端_02



q Spring BlazeDS Integration:这是一个提供Spring与Adobe Flex技术集成的模块,大家应该都领略过使用Flex技术做前端展现的绚丽效果。在现实的应用开发中,如果使用Flex作为前端,那么后端怎样和服务器端集成才能正好成为利用Java EE技术构建的后端呢?Spring BlazeDS Integration简化了这种集成工作,特别是对后端应用由Spring来构建的情况,正是Spring BlazeDS大显身手的场合了。在Spring BlazeDS Integration项目中,为Flex前端和后台的通信提供了和Spring开发模式一致的编程模型。在这个项目中,实际上使用了BlazeDS这个由Adobe提供的模块,这个BlazeDS模块实现了Flex前端展现和服务器后端处理的通信机制。在这个实现的基础上,Spring BlazeDS Integration进行了进一步的封装,让这个模块的使用更像是由一个受Spring IoC容器管理的Bean。
q Spring Security:是广泛使用的基于Spring的认证和安全工具,就是先前在Spring社区中久负盛名的Acegi框架,Spring的老用户对这个框架都不陌生—这是一个自发的由Spring的爱好者发起的安全框架,其目标是为Spring应用提供一个安全服务,比如用户认证、授权等。可以说,没有这样一个框架,很多Spring应用的开发是很难成为一个完整应用的,因为框架是构建用户管理的核心和基础。Spring Acegi由Spring团队接手后,在2006年发行了稳定的1.0正式版,虽然是基于Acegi框架的,但是Spring Security已经在原有基础上增加了许多的新特性。关于这个框架的架构和具体实现,本书的后续章节会进行详细介绍。
q Spring Security OAuth:这个项目为OAuth在Spring上的集成提供支持。OAuth是一个第三方的模块,提供一个开放的协议的实现,通过这个协议,前端桌面应用可以对Web应用进行简单而标准的安全调用。
q Spring Dynamic Modules:可以让Spring应用运行在OSGi的平台上。我们知道,通过使用OSGi平台,增加了应用在部署和运行时的灵活性, Eclipse就是构建在OSGi的平台上,通过这个项目,可以在OSGi平台上方便地运行Spring应用。
q Spring Batch:提供构建批处理应用和自动化操作的框架,这些应用的特点是不需要与用户交互,重复的操作量大,对于大容量的批量数据处理而言,这些操作往往要求较高的可靠性。Spring Batch的架构如图1-3所示。


spring项目建类 spring子项目_后端_03



q Spring Integration:体现了“企业集成模式”的具体实现,并为企业的数据集成提供解决方案。Spring Integration为企业数据集成提供了各种适配器,通过这些适配器来转换各种消息格式,并帮助Spring应用完成与企业应用系统的集成。
q Spring AMQP:是为Spring应用更好地使用基于AMQP(高级消息队列协议)的消息服务而开发的,使在Spring应用中使用AMQP消息服务器变得更为简单。这个项目支持Java和.NET两个版本。SpringSource旗下的Rabbit MQ就是一个开源的基于AMQP的消息服务器,Rabbit MQ是用Erlang语言开发出来的。
q Spring .NET:如果想在.NET环境中也像在Java环境中使用Spring一样为应用开发带来便利,那应该怎么办?可以考虑使用Spring .NET项目,这是Spring在.NET环境中的移植,.NET开发人员通过它可以在.NET环境中使用Spring的IoC容器,以及AOP这些在Java开发中被大家熟知的特性。希望通过Spring .NET项目,能够简化.NET的应用开发。
q Spring Android:为Android终端开发应用提供Spring的支持,它提供了一个在Android应用环境中工作,基于Java的REST客户端。
q Spring Mobile:Spring Mobile和Spring Android不同,它能使工作在Spring传统的服务器端完成。它是基于Spring MVC构建的,为移动终端的服务器应用开发提供支持,比如,使用Spring Mobile可以在服务器端自动识别连接到服务器的移动终端的相关设备信息,从而为特定的移动终端实现应用定制。
q Spring Social:是Spring框架的扩展,可以帮助Spring应用更方便地使用SNS(Social Network Service),例如FaceBook和Twitter这些服务的使用等。
q Spring Data:该项目为Spring应用提供使用非关系型数据的能力,比如,当基础数据并非存储在关系数据库中时,又如Map-Reduce中的分布式存储、云计算存储环境等。 Spring应用可以考虑使用Spring Data来操作这种类型的数据。