Spring Framework

spring framework介绍

Spring是什么呢?首先它是一个开源的项目,而且目前非常活跃;它是一个基于IOC和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了统一的接口,采用IOC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现Transaction Management,等等

入门攻略

编辑
Spring的基础思想来源于Rod Johnson的一本著名的j2ee书籍:Expert One-on-One J2EE Design and Development (Programmer to Programmer),在这本书中,Rod根据他自己多年的j2ee开发经验,提出了众多新颖的思想,当然如果想看这本书的话,最好看英文版,因为中文版被翻译的惨不忍睹,看了会几天吃不下睡不着的......
在上面那本书附带的代码基础上,以Rod Johnson和Juergen Hoeller两人为核心的一个开发团队经过努力,于2004年3月份发布了Spring Framework 1.0版,一经发布就引起了业界的强烈关注,目前各种java相关的会议中都有Rod Johnson等人的出现,最近Rod Johnson和Juergen Hoeller两人合作了一本新书。
Expert One-on-One J2EE Development without EJB也已出版热销,可惜的目前国内尚无法看到。目前,Spring Framework已经接近发布1.1 RC1,从Spring的邮件列表看,Juergen Hoeller正在组织最后的修改和测试,估计几日内就可以看到他们努力的成果。
另外,围绕在Spring周围的一些相关项目也在活跃的开展着,其中在Spring Framework首页上提供链接的Acegi Security System for SpringFramework是其中的佼佼者,该项目的主要目的是为SpringFramework提供安全机制,它充分利用Spring的AOP,采用Spring的风格,很容易让熟悉Spring的开发人员上手。此外,SpringFramework也开始了.Net版本的开发,当然目前处于起步阶段,而且是另外一个团队在开发。
目前在使用Spring的开发人员中,多数人倾向于Struts+Spring+Hibernate的组合,但经过本人的学习,我感觉Spring提供的 MVC框架更为出色优雅,无须Struts的介入,如果没有历史遗留问题的困扰(如已经存在大量Struts代码或者开发人员已经对Struts非常熟悉),建议采用Spring+Hibernate,再加上Acegi实现认证和授权,将是很不错的开发框架。
至于开发环境,随着eclipse3.0的发布,采用这一free的IDE,再加上一些free的plugin,将可以组织出一套非常出色的集成开发环境:eclipse3.0 + XmlBuddy 2.0.10 + Lomboz3.0 + Spring IDE for Eclipse。在Spring的开发团队中,Rod Johnson是eclipse的支持者,而Juergen Hoeller更喜欢JetBrains的IDEA,目前IDEA已经到了4.5 RCVIII版,比4.0又有了很大的提高,如果有钱的话更推荐使用IDEA。
Spring Framework 是一个 Java/Java EE/.NET 的分层应用程序框架。该框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一文中的代码,并最初由 Rod Johnson 和 Juergen Hoeller et al 开发。Spring Framework 提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。

关键特性

◆强大的基于 JavaBeans 的采用控制反转(Inversion of Control,IoC)原则的配置管理,使得应用程序的组建更加快捷简易。
◆一个可用于从 applet 到 Java EE 等不同运行环境的核心 Bean 工厂。
◆数据库事务的一般化抽象层,允许插件式事务管理器,简化事务的划分使之与底层无关。
◆内建的针对 JTA 和 单个 JDBC 数据源的一般化策略,使 Spring 的事务支持不要求 Java EE 环境,这与一般的 JTA 或者 EJB CMT 相反。
◆JDBC 抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代码), 简化了错误处理, 大大减少了程序员的编码量. 再次利用JDBC时,你无需再写出另一个“终止”模块。 并且面向JDBC的异常与Spring 通用数据访问对象 (Data Access Object) 异常等级相一致。
◆以资源容器,DAO 实现和事务策略等形式与 Hibernate,JDO 和 iBATIS SQL Maps 集成。利用众多的翻转控制方便特性来全面支持,解决了许多典型的Hibernate集成问题。所有这些全部遵从Spring通用事务处理和通用数据访问对象异常等级规范。
◆灵活的基于核心 Spring 功能的 MVC 网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现技术,例如 JSP,FreeMarker,Velocity,Tiles,iText 以及 POI。值得注意的是,Spring 中间层可以轻易地结合于任何基于 MVC 框架的网页层,例如 Struts,WebWork,或 Tapestry。
◆提供诸如事务管理等服务的面向方面编程框架。
在设计应用程序Model时,MVC 模式(例如Struts)通常难于给出一个简洁明了的框架结构。Spring却具有能够让这部分工作变得简单的能力。程序开发员们可以使用Spring的 JDBC 抽象层重新设计那些复杂的框架结构。

下属产品

Spring 核心产品
Spring Web Flow Web工作流的产品,里面集成了Spring 的MVC
Spring Security 认证和集成方面的组件
Spring Web Services Web服务的工具类
Spring Batch 执行Java批处理的工具类
Spring Dynamic Modules 动态维护模块的工具类
Spring Integration 集成工具
Spring JavaConfig 配置工具类
Spring中包含的关键特性:
强大的基于JavaBeans的采用控制反转(Inversion of Control,IoC)原则的配置管理,使得应用程序的组建更加快捷简易。
一个可用于Java EE等运行环境的核心Bean工厂。
数据库事务的一般化抽象层,允许声明式(Declarative)事务管理器,简化事务的划分使之与底层无关。
内建的针对JTA和单个JDBC数据源的一般化策略,使Spring的事务支持不要求Java EE环境,这与一般的JTA或者EJB CMT相反。
JDBC 抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代码),简化了错误处理,大大减少了程序员的编码量。再次利用JDBC时,你无需再写出另一个’终止’(finally)模块。并且面向JDBC的异常与Spring通用数据访问对象(Data Access Object)异常等级相一致。
以资源容器,DAO实现和事务策略等形式与Hibernate,JDO和MyBatis、SQL Maps集成。利用众多的翻转控制方便特性来全面支持,解决了许多典型的Hibernate集成问题。所有这些全部遵从 Spring 通用事务处理和通用数据访问对象异常等级规范。
灵活的基于核心 Spring 功能的MVC网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如JSP、FreeMarker、Velocity、Thymeleaf 等。值得注意的是,Spring 中间层可以轻易地结合于任何基于MVC框架的网页层,例如Struts、WebWork或Tapestry。
提供诸如事务管理等服务的AOP框架。
在设计应用程序 Model 时,MVC模式(例如Struts)通常难于给出一个简洁明了的框架结构。Spring 却具有能够让这部分工作变得简单的能力。程序开发员们可以使用Spring的JDBC抽象层重新设计那些复杂的框架结构。
 

架包

spring的jar包只有20个左右,每个都有相应的功能,一个jar还可能依赖了若干其他jar,所以,搞清楚它们之间的关系,配置maven依赖就可以简洁明了,下面举个例子,要在普通java工程使用spring框架,需要哪些jar呢?只要一个
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>3.2.17.RELEASE</version>
</dependency>

在web工程中引入spring mvc
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>3.2.17.RELEASE</version>
</dependency>

spring3结构图

 

 图中将spring分为5个部分:core、aop、data access、web、test,图中每个圆角矩形都对应一个jar,如果在maven中配置,所有这些jar的“groupId”都是“org.springframework”,每个jar有一个不同的“artifactId”,另外,“instrumentation”有两个jar,还有一个“spring-context-support”图中没有列出,所以spring3的jar包一共是19个

core

core部分包含4个模块

spring-core依赖注入IoC与DI的最基本实现
spring-beansBean工厂与bean的装配
spring-contextspring的context上下文即IoC容器
spring-expressionspring表达式语言

它们的完整依赖关系

 

因为spring-core依赖了commons-logging,而其他模块都依赖了spring-core,所以整个spring框架都依赖了commons-logging,如果有自己的日志实现如log4j,可以排除对commons-logging的依赖,没有日志实现而排除了commons-logging依赖,编译报错

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>3.2.17.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

aop

aop部分包含4个模块

spring-aop面向切面编程
spring-aspects集成AspectJ
spring-instrument提供一些类级的工具支持和ClassLoader级的实现用于服务器
spring-instrument-tomcat针对tomcat的instrument实现

它们的依赖关系

data access

data access部分包含5个模块

spring-jdbcjdbc的支持
spring-tx事务控制
spring-orm对象关系映射集成orm框架
spring-oxm对象xml映射
spring-jmsjava消息服务

它们的依赖

 

 

 

web

web部分包含4个模块

spring-web基础web功能如文件上传
spring-webmvcmvc实现
spring-webmvc-portlet基于portlet的mvc实现
spring-struts与struts的集成不推荐spring4不再提供

它们的依赖关系

test

test部分只有一个模块,我将spring-context-support也放在这吧

spring-testspring测试提供junit与mock测试功能
 
spring-context-supportspring额外支持包比如邮件服务视图解析等

它们的依赖关系

到这里spring3的结构就介绍完了,看着这些图我相信你在maven中配置spring依赖时不会再混乱了,spring与spring mvc中集成其他技术的详细配置可以参考我这边文章spring与spring mvc集成多种技术构建复杂工程

下面介绍spring4的结构,spring4与spring3基本相同,下面是官网给出的结构图

 

可以看到,图中去掉了spring3的struts,添加了messaging和websocket,其他模块保持不变,因此,spring4的jar有20个

 

spring-websocket为web应用提供的高效通信工具
spring-messaging用于构建基于消息的应用程序

它们的依赖关系

posted @ 2019-09-15 20:47  叶建国  阅读(712)  评论(0编辑  收藏  举报