Spring体系结构
核心容器
核心容器由spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring表达式语言,Spring Expression Language)等模块组成,它们的细节如下:
-
spring-core模块提供了框架的基本组成部分,包括 IoC 和依赖注入功能。
-
spring-beans 模块提供 BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦。
-
context模块建立在由core和 beans 模块的基础上建立起来的,它以一种类似于JNDI注册的方式访问对象。Context模块继承自Bean模块,并且添加了国际化(比如,使用资源束)、事件传播、资源加载和透明地创建上下文(比如,通过Servelet容器)等功能。Context模块也支持Java EE的功能,比如EJB、JMX和远程调用等。ApplicationContext接口是Context模块的焦点。spring-context-support提供了对第三方库集成到Spring上下文的支持,比如缓存(EhCache, Guava, JCache)、邮件(JavaMail)、调度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。
- spring-expression模块提供了强大的表达式语言,用于在运行时查询和操作对象图。它是JSP2.1规范中定义的统一表达式语言的扩展,支持set和get属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从Spring IoC容器检索对象,还支持列表的投影、选择以及聚合等。。
数据访问/集成
数据访问/集成层包括 JDBC,ORM,OXM,JMS 和事务处理模块,它们的细节如下:
(注:JDBC=Java Data Base Connectivity,ORM=Object Relational Mapping,OXM=Object XML Mapping,JMS=Java Message Service)
-
JDBC 模块提供了JDBC抽象层,它消除了冗长的JDBC编码和对数据库供应商特定错误代码的解析。
-
ORM 模块提供了对流行的对象关系映射API的集成,包括JPA、JDO和Hibernate等。通过此模块可以让这些ORM框架和spring的其它功能整合,比如前面提及的事务管理。
-
OXM 模块提供了对OXM实现的支持,比如JAXB、Castor、XML Beans、JiBX、XStream等。
-
JMS 模块包含生产(produce)和消费(consume)消息的功能。从Spring 4.1开始,集成了spring-messaging模块。。
- 事务模块为实现特殊接口类及所有的 POJO 支持编程式和声明式事务管理。(注:编程式事务需要自己写beginTransaction()、commit()、rollback()等事务管理方法,声明式事务是通过注解或配置由spring自动处理,编程式事务粒度更细)
Web
Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成,它们的细节如下:
-
Web 模块提供面向web的基本功能和面向web的应用上下文,比如多部分(multipart)文件上传功能、使用Servlet监听器初始化IoC容器等。它还包括HTTP客户端以及Spring远程调用中与web相关的部分。。
-
Web-MVC 模块为web应用提供了模型视图控制(MVC)和REST Web服务的实现。Spring的MVC框架可以使领域模型代码和web表单完全地分离,且可以与Spring框架的其它所有功能进行集成。
-
Web-Socket 模块为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式。
- Web-Portlet 模块提供了用于Portlet环境的MVC实现,并反映了spring-webmvc模块的功能。
其他
还有其他一些重要的模块,像 AOP,Aspects,Instrumentation,Web 和测试模块,它们的细节如下:
-
AOP 模块提供了面向方面的编程实现,允许你定义方法拦截器和切入点对代码进行干净地解耦,从而使实现功能的代码彻底的解耦出来。使用源码级的元数据,可以用类似于.Net属性的方式合并行为信息到代码中。
-
Aspects 模块提供了与 AspectJ 的集成,这是一个功能强大且成熟的面向切面编程(AOP)框架。
-
Instrumentation 模块在一定的应用服务器中提供了类 instrumentation 的支持和类加载器的实现。
-
Messaging 模块为 STOMP 提供了支持作为在应用程序中 WebSocket 子协议的使用。它也支持一个注解编程模型,它是为了选路和处理来自 WebSocket 客户端的 STOMP 信息。
- 测试模块支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试。
-
环境设置
本教程将指导你如何准备开发环境来使用 Spring 框架开始你的工作。本教程还将教你在安装 Spring 框架之前如何在你的机器上安装 JDK,Tomcat 和 Eclipse。
第 1 步:安装 Java 开发工具包(JDK)
你可以从 Oracle 的 Java 网站 Java SE Downloads 下载 JDK 的最新版本。你会在下载的文件中找到教你如何安装 JDK 的说明,按照给出的说明安装和配置 JDK 的设置。最后,设置 PATH 和 JAVAHOME 环境变量,引入包含 java 和 javac 的目录,通常分别为 java install dir/bin 和 java install _ dir。
如果你运行的是Windows,并在C:\jdk1.6.0_15上安装了JDK,你就可以把下面这行写入C:\autoexec.bat文件中。
set PATH=C:\jdk1.6.0_15\bin;%PATH% set JAVA_HOME=C:\jdk1.6.0_15
或者,在 Windows XP/7/8 中,你也可以右键单击“我的电脑”,选择“属性”,然后是“高级”,然后是“环境变量”。接下来,你将更新 PATH 值,并且按下 OK 按钮。
在 Unix(Solaris、Linux 等等)上,如果在 /usr/local/jdk1.6.0_15 上安装 SDK,并且使用 C shell 命令,你需要把下面的内容添加到 .cshrc 文件中。
setenv PATH /usr/local/jdk1.6.0_15/bin:$PATH setenv JAVA_HOME /usr/local/jdk1.6.0_15
或者,如果你使用集成开发环境(IDE),如 Borland JBuilder,Eclipse,IntelliJ IDEA 或者 Sun ONE Studio,编译和运行一个简单的程序,用来确认 IDE 知道你安装了 Java,否则应该根据 IDE 给定的文档做正确的设置。
第 2 步:安装 Apache Commons Logging API
你可以从 http://commons.apache.org/logging/ 下载 Apache Commons Logging API 的最新版本。一旦你下载完安装包,并且解压二进制的发行版本到一个方便的位置。例如在 windows 上的 C:\commons-logging-1.1.1 中,或在 Linux/Unix 上的 /usr/local/commons-logging-1.1.1 中。该目录将有如下的 jar 文件和其他支持的文件等。
确保你在这个目录上正确的设置 CLASSPATH 变量,否则你将会在运行应用程序时遇到问题。
第 3 步:安装 Eclipse IDE
本教程中的所有例子使用 Eclipse IDE 编写。所以我建议你应该在你的机器上安装 Eclipse 的最新版本。
为了安装 Eclipse IDE,从 http://www.eclipse.org/downloads/ 上下载最新的 Eclipse 二进制文件。你下载完安装包,可以解压二进制的发行版本到一个方便的位置。例如在 windows 上的 C:\eclipse 中,或在 Linux/Unix 上的 /usr/local/eclipse 中,最后恰当的设置 PATH 变量。
在 Windows 机器上,可以通过执行以下命令启动 Eclipse,或者可以简单地双击 eclipse.exe。
%C:\eclipse\eclipse.exe
在 Unix(Solaris 和 Linux 等)上,可以通过执行下面的命令启动 Eclipse:
$/usr/local/eclipse/eclipse
启动成功后,如果一切正常,它应该显示下面的结果:
第 4 步:安装 Spring 框架库
如果前三个步骤一切正常,你就可以继续设置你的 Spring 框架。下面是在电脑上下载并安装框架的简单步骤。
-
选择是要在 Windows 还是在 UNIX 上安装 Spring,然后继续进行下一个步骤,在 Windows 上下载 .zip 文件,在 Unix 上安装则下载 .tz 文件。
-
从 http://repo.spring.io/release/org/springframework/spring 下载最新版本的 Spring 框架的二进制文件。
- 在写本教程的时候,我在我的 Windows 机器上下载了 spring-framework-4.1.6.RELEASE-dist.zip,当你解压缩下载的文件时,它内置的目录结构为 E:\spring,如下所示。
-
你会在目录 E:\spring\libs 中发现所有的 Spring 库。确保你在这个目录上正确的设置 CLASSPATH 变量,否则你将会在运行应用程序时遇到问题。如果使用的是 Eclipse,就不需要设置 CLASSPATH,因为所有的设置将通过 Eclipse 完成。
一旦你完成了最后一步后,你就可以继续你的第一个 Spring 例子,你将会在下一章中看到。