译者注:为了方便理解,本译文里面部分名词翻译如下,如有异议,请在评论区指出。
dependency injection — 依赖注入
inversion of control – 控制反转
instrumentation – 植入
aop — 面向切面的编程
milestones – 里程碑
snapshots – 快照
artifact — 工件(这个词在文中大部分地方都没有翻译,用过maven或gradle的都明白,如果有更好的中文翻译,请写在评论区)
本参考指南提供了有关spring framework的详细信息。它全面的介绍了spring的所有的功能,以及spring涉及的基础概念(如“依赖注入” “dependency injection”)。
spring 框架是一个java平台,它为开发java应用程序提供全面的基础架构支持。spring负责基础架构,因此您可以专注于应用程序的开发。
spring可以让您从“plain old java objects”(pojo)中构建应用程序和通过非侵入性的pojo实现企业应用服务。此功能适用于java se的编程模型,全部的或部分的适应java ee模型。
这些例子告诉你,作为一个应用程序开发人员,如何从spring平台中受益:
写一个java方法执行数据库事务,而无需处理具体事务的apis。
写一个本地java方法去远程调用,而不必处理远程调用的apis。
写一个本地java方法实现管理操作,而不必处理jmx apis。
写一个本地java方法实现消息处理,而不必处理jms apis。
java应用程序-这是一个宽松的术语,它包括的范围从受限的嵌入式应用程序到n层的服务器端企业应用程序-通常组成程序的对象互相协作而构成正确的应用程序。因此,在一个应用程序中的对象彼此具有依赖关系(dependencies)。
虽然java平台提供了丰富的应用程序开发功能,但它缺乏将基本的模块组织成一个整体的方法,而将该任务留给了架构师和开发人员。虽然你可以使用如工厂,抽象工厂,builder,装饰器和service locator等 设计模式来构建各种类和对象实例,使他们组合成应用程序,但这些模式无非只是:最佳实践赋予的一个名字,以及这是什么样的模式,应用于哪里,它能解决的问题等等。 模式是您必须在应用程序中自己实现的形式化的最佳实践。
spring框架控制反转(ioc)组件通过提供一系列的标准化的方法把完全不同的组件组合成一个能够使用的应用程序来解决这个问题。spring框架把形式化的设计模式编写为优秀的对象,你可以容易的集成到自己的应用程序中。许多组织和机构使用spring框架,以这种方式(使用spring的模式对象)来设计健壮的,可维护的应用程序。
背景
spring框架的功能被有组织的分散到约20个模块中。这些模块分布在核心容器,数据访问/集成,web,aop(面向切面的编程),植入(instrumentation),消息传输和测试,如下面的图所示。
图2.1 spring框架概述
单独的spring-aspects模块,提供了与aspectj的集成。
spring-instrument模块提供了类植入(instrumentation)支持和类加载器的实现,可以应用在特定的应用服务器中。该spring-instrument-tomcat 模块包含了支持tomcat的植入代理。
spring框架4包括spring-messaging(消息传递模块),其中包含来自spring integration的项目,例如,message,messagechannel,messagehandler,和其他用来传输消息的基础应用。该模块还包括一组用于将消息映射到方法的注释(annotations),类似于基于spring mvc注释的编程模型。
数据访问/集成层由jdbc,orm,oxm,jms和事务模块组成。
web层由spring-web,spring-webmvc和spring-websocket 模块组成。
spring-web模块提供基本的面向web的集成功能,例如多部分文件上传功能,以及初始化一个使用了servlet侦听器和面向web的应用程序上下文的ioc容器。它还包含一个http客户端和spring的远程支持的web相关部分。
之前描述的构建模块使spring成为许多应用场景的理性选择,从在资源受限设备上运行的嵌入式应用程序到使用spring的事务管理功能和web框架集成的全面的企业应用程序。
图2.2 典型的成熟完整的spring web应用程序
图2.3使用第三方web框架的spring中间层
有时情况不允许你完全切换到不同的框架。 spring框架并不强制您使用其中的一切;这不是一个全有或全无的解决方案。使用struts,tapestry,jsf或其他ui框架构建的现有前端可以与基于spring的中间层集成,从而允许您使用spring事务功能。您只需要使用applicationcontext连接您的业务逻辑,并使用webapplicationcontext来集成您的web层。
图2.4 远程使用场景
当您需要通过web服务访问现有代码时,你可以使用spring的 hessian-,rmi-或httpinvokerproxyfactorybean类。启用对现有应用程序的远程访问并不困难。
图2.5 ejbs – 包装现有的pojos