Introduction to the Spring Framework<o:p></o:p>
By Rod Johnson<o:p></o:p>
<o:p> </o:p>
自从这篇文章的第一版在2003年10月发表以来,Spring框架正在逐步普及。经历了1.0最终版到现在的1.2版,而且被运用于很多行业和项目中。在这篇文章中,我会解释Spring为什么会获得成功,并告诉你我十分肯定它能帮助你开发J2EE应用程序。
又是一个框架?
你可能正在想“不过是另一个的框架”。如今有这么多J2EE框架,并且你可以建立你自己的框架,为什么你应该读这篇文章或者下载Spring框架(或者你还没有下载)?社区中持续的高关注度暗示了Spring一定有它的价值;这也有很多技术原因。
以下的几个原因让我相信Spring是独一无二的:
l 它关注于很多其它框架没有关注的地方。Spring着重于提供一种管理你业务对象的方法。
l Spring是全面的、模块化的。Spring采用分层架构,这意味着你可以仅选择其中任何一个独立的部分,而它的架构是内部一致的。因此你能从学习中获得最大的价值。例如,你可以仅用Spring来简化你的JDBC使用,或者你可以选择使用Spring来管理你的业务对象。把Spring增量地引入现有的项目中是十分容易的。
l Spring从设计之初就是要帮助你写出易于测试的代码。Spring是测试驱动项目的一个理想框架。
l Spring是一个日益重要的集成技术,它的角色已得到一些大厂商的认可。
Spring不需要你的项目再依赖于另一个框架。Spring也许能称得上是一个“一站式”商店,提供了大多数传统应用所需要的基础结构。它还提供了别的框架没有涉及到的东西。
作为一个从2003年2月开始的开源项目,Spring有深厚的历史背景。这个开源项目源自我在2002年底出版的《Expert One-on-One J2EE Design and Development》中的基础代码。书中展现了Spring背后的基础性架构思考。然而,这个架构概念可以追溯到2000年早期,并反映了我在一系列成功的商业项目的基础结构的开发中所获得的经验。
从2003年1月起,Spring落户于SourceForge。现在有20位开发者,一些主要人员把所有的时间都花在了Spring的开发和支持上。繁荣的开源社区帮助它茁壮成长,这远非任何个人所及。
Spring架构上的好处
在继续深入前,让我们来看看Spring带给一个项目的好处:
l Spring可以有效组织你的中间层对象,无论你是否选择使用EJB。Spring关心那些当你只选择Struts或其他为J2EE API量身定做的框架时被留给你解决的问题。Spring的配置管理服务可以被运用于任何运行环境的各种架构性分层中,这也许是中间层中最有价值的。
l Spring可以消除在很多项目中所常见的单例的过度使用。在我看来,它的主要问题是降低了可测试性和面向对象的程序。
l Spring通过一种在应用程序和项目之间一致的方法来处理配置,这消除了需要自定义配置文件格式的烦恼。还记为了知道某个类要找哪个神奇的属性项或系统属性而不得不去读Javadoc,甚至读源代码吗?有了Spring你只要简单地看看类的JavaBean属性或构造参数。控制反转和依赖注入(将在下文讨论)的使用帮助实现了这一简化。
l Spring通过把针对接口而非类编码的代价降低到几乎未零来帮助养成好的编码习惯。
l Spring被设计为让构建在它之上的应用程序尽可能少地依赖于它的API。大多数Spring应用程序中的业务对象不依赖于Spring。
l 构建于Spring之上的应用程序很容易进行单元测试。
l Spring使得是否使用EJB成为实现时的选择,而非架构上的决定。你能在不改变调用代码的情况下选择用POJO或EJB来实现业务接口。
l Spring帮助你在不用EJB的情况下解决很多问题。Spring能提供一种适用于很多应用程序的EJB的替代品。例如,Spring可以无需EJB容器,用AOP来提供声明性事务管理;如果你仅与一个数据库打交道,甚至可以没有JTA实现。
l Spring为数据访问提供了一个一致的框架,无论使用JDBC还是像TopLink、Hibernate或者JDO实现这样的实体关系映射产品。
l Spring为很多方面提供了一种一致的简单的编程模型,这使得它成为了一种理想的架构“胶”。你可以从Spring访问JDBC、JMS、JavaMail、JNDI和很多其他重要API的途径中发现这种一致性。
Spring是一种帮助你使用POJO来构建应用程序的基础技术。要达到这个目标需要一个能将复杂性隐藏起来的成熟的框架。
因此Spring真的可以帮助你实现针对你的问题的最简单可行的解决方案。这是十分有价值的。
Spring做了些什么?
Spring提供许多功能,所以我将依次地快速浏览每个主要方面。
任务描述
首先,让我们明确一下Spring的范围。尽管Spring囊括了很多东西,但我们应该清楚的知道它该涉及什么,不该涉及什么。
Spring的主要目的是使J2EE更易于使用,培养好的编程习惯。它通过使用一种能适用于很多环境下的基于POJO的编程模型来实现这一目的。
Spring不重新发明轮子。因此你会发现Spring中没有日志,没有连接池,没有分布式事务调度。所有这些东西都由开源项目(例如提供我们所有的日志输出的Commons Logging,或者是Commons DBCP)或你的应用服务器提供。同样的道理,我们不提供实体/关系映射层。因为有像TopLink、Hibernate和JDO这样的优秀的解决方案。
Spring致力于使现有技术更加易用。例如,尽管我们没有底层业务的事务调度,但我们提供了一个凌驾于JTA或其他事物策略的抽象层。
Spring不直接与其他开源项目竞争,除非我们觉得我们能提供些新的东西。比如说,像其他开发者一样,我们从未就Struts感到满意,我们觉得MVC Web框架还有改进的余地。(随着Spring应用地快速推广,很多人也同意了我们的观点。)在很多领域,例如它的轻量级IoC容器和AOP框架,Spring有直接的竞争,但Spring确实是这些领域的先锋。
Spring得益于内部一致性。所有开发者正唱着同一首赞歌,基础思想依然忠于《Expert One-on-One J2EE Design and Development》中提出的思想。我们已经能够在多个领域中使用
些核心概念,例如控制反转。
Spring可用于各种应用服务期。当然保证可移植性一直是一个挑战,但我们避免了开发者眼中的各种平台特有的或非标准的东西,支持WebLogic、Tomcat、Resin、Jboss、Jetty、Geronimo、WebSphere和其他应用服务器。Spring的非侵入性、POJO方法是我们可以利用环境特有特性而不用放弃可移植性,就像Spring 1.2中在掩护下使用BEA特有API从而开启增强WebLogic事务管理功能。
控制反转(Inversion of Control, IoC)容器
Spring的核心是为与JavaBeans一起工作而设计的org.springframework.beans包。这个包一般不直接被用户调用,而是作为Spring功能的基础。<o:p></o:p>
下一个更高的抽象层是bean工厂。一个Spring的bean工厂是一个普通的工厂,它能通过名称获得对象,并管理对象的关系。<o:p></o:p>
Bean工厂支持两种模式的对象:<o:p></o:p>
l 单例:这种情况下,存在一个有特定名称,在查找时能被获取的共享对象实例。这是默认的,也是最常用的模式。是无状态服务对象的理想选择。<o:p></o:p>
l 原型或非单例:在这种情况下,每次获取操作都会创建一个独立的对象作为结果。例如,这能被用来使每个调用者都有自己的独立的对象引用。<o:p></o:p>
因为Spring容器管理对象间的关系,它能在以下情况添加值,在诸如受管理的POJO的透明池、支持热交换之类的服务需要的地方,为在运行时交换目标引用但不影响调用者和线程安全性而由容器引入的一个间接层中。依赖注入的众多优点之一(简单讨论一下)就是这所有的一切几乎是透明的,没有API介入。<o:p></o:p>
org.springframework.beans.factory.BeanFactory是一个简单的接口,它能通过多种途径被实现。BeanDefinitionReader接口将元数据格式从BeanFactory各自的实现中分离出来,所以Spring提供的普通BeanFactory实现能和不同类别的元数据一起使用。尽管很少有人发现有这个必要,你还是可以简单地实现你自己的BeanFactory或者BeanDefinitionReader。最常用的BeanFactory定义是:<o:p></o:p>
l XmlBeanFactory:它可解析简单直观的定义类和命名对象属性的XML结构。我们提供了一个DTD帮助简化编写。<o:p></o:p>
l DefaultListableBeanFactory:它提供了解析属性文件中的bean定义的能力,可通过编程创建BeanFactory。<o:p></o:p>
每个bean定义能被当作一个POJO(用类名和JavaBean初始属性或构造方法参数来定义),或被当作一个FactoryBean。FactoryBean接口添加了一个间接层。一般,这用来创建用AOP或其他方法的代理对象:例如,添加声明性事物管理的代理。这在概念上和EJB的拦截机制相近,但实践起来更方便,更有效。<o:p></o:p>
BeanFactory能选择性地参与于一个层次结构中,“继承”先辈的定义。这使得像控制器servlet这样的个体资源能拥有自己的独立对象集的同时,在整个应用程序中能共享公共配置。<o:p></o:p>
如此使用JavaBeans的动机在《Expert One-on-One J2EE Design and Development》的第四章中已经描述过了,你同样也可以在theServerSide站点上以免费PDF的形式获得(/articles/article.tss?l=RodJohnsonInterview)。<o:p></o:p>
通过bean工厂的概念,Spring成为了一个控制反转容器。(我不太喜欢容器这个词,因为它令人想起了
分享到:
相关推荐
This book is an introduction to the well-known Spring Framework that offers an inversion of control container for the Java platform. The Spring Framework is an open source application framework that ...
### Spring Framework介绍 #### 一、Spring框架概述 Spring是一个开源框架,最初由Rod Johnson创建,目的是为了简化Java企业级应用程序的开发。Spring的核心特性包括依赖注入(Dependency Injection, DI)、面向切...
An Introduction to the Microsoft Bot Framework 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Chapter 1 – Introduction to Spring Framework Chapter 2 – Spring Framework basics Chapter 3 - Configuring beans Chapter 4 - Dependency injection Chapter 5 - Customizing beans and bean definitions ...
An Introduction to the Bootstrap_Efron,an excellent book, and worth a reading by most students and practitioners in statistics... Throughout the book, the authors have spent a lot of effort in ...
《Spring框架:轻量级J2EE架构的入门》这一文档深入探讨了Spring框架如何作为轻量级容器在Java世界中的重要角色,特别是在J2EE(Java 2平台企业版)环境中。以下是对该文档标题、描述、标签及部分内容所涉及的关键...
### ArcGIS Server 9.2帮助文档翻译(8)Introduction to the Tasks Framework #### 引言 在ArcGIS Server 9.2版本中,引入了一个非常实用且强大的组件——任务框架(Tasks Framework)。该框架旨在简化应用程序开发...
Based on a new classification of algorithm design techniques and a clear delineation of analysis methods, Introduction to the Design and Analysis of Algorithms presents the subject in a coherent and ...
An Introduction to the Event-Related Potential Technique.PDF 是一个STEVEN J。LUCK的经典ERP实验指导书,2009年由范思陆翻译成中文,华东师范大学出版《事件相关电位基础》
It is elementary in mathematical level, but conceptually rich in statistical ideas and serious in its aim to help students think about data and use statistical methods with understanding. Although ...
根据提供的文件信息,本文将介绍金融衍生品的数学基础,这些内容来源于《An Introduction to the Mathematics of Financial Derivatives》这本书的3rd Edition版本。Ali Hirsa是该书的编辑者,而Salih N. Neftci则是...
Spring focuses on the "plumbing" of enterprise applications so that teams can focus on application-level business logic, without unnecessary ties to specific deployment environments. Features Core ...
An Introduction to the Microsoft Bot Framework 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Django是一个用Python语言编写的开源web框架,它遵循MVC(模型-视图-控制器)设计模式。Django设计的初衷是为了简化创建复杂、数据库驱动的网站的过程。它包括众多的特性,旨在快速开发安全、易于维护的web应用程序...
Introduction to the Design and Analysis of Algorithms 3rd Edition (算法分析设计基础Anany Levitin )第三版课后答案,第三版,1-12章全,有hints也有solutions,英文版
经典书籍:An Introduction to the Theory of Graph Spectra PDF版
首先,Spring框架的模块构成在文件的“1.Introduction to Spring Framework”部分得到介绍,涵盖了核心容器、数据访问/集成、Web模块、面向切面编程(AOP)和仪器、测试等模块。核心容器包括了依赖注入(DI)和控制反转...