J2EE曾经是Java世界的骄傲,但它的复杂和繁琐让Java从业人员头痛不已。Spring的出现把从业者从J2EE的复杂和繁琐中解脱出来。
J2EE曾经是Java世界的骄傲,基于J2EE的企业应用,在B/S架构逐渐引入企业应用软件开发领域之际,一下子甩开了老冤家微软,风风光光的占领了高端的市场。但它的复杂和繁琐,同时也让让Java从业员们头痛不已。
幸 亏,Java世界还有另一个更大的骄傲—无比繁荣的Java开源社区。随着 Spring Framework在这个所有开发语言中最好的社区中诞生,轻 量级架构抛弃EJB的大旗终于由Spring坚定举起,而且身后很快汇聚了一群同样有着 POJOs(plain old Java objects)信 念的开源项目仅仅追随。
有趣的是,为了应对轻量级架构的大势,Java各商业大佬之间磋商又磋商的推出了同样有着轻量级特征的 JavaEE 5标准。但仔细一看各位大佬的发布计划,就发现他们不再像以往那么热心了,IBM的新版应用服务器居然排到了2008——我们开奥运的好日 子才会发布。因为Spring 的发展已经太好,大佬们能赚到的钱已不多,导致了热情大减。所以,Spring作为一站式企业应用的基础,POJO轻量级 架构的母体之外,又多了一个 Java EE标准狙击者的定位。
下面让我们细看一下这个Java世界近年来最耀眼的项目。
又是一个框架?
第一次听到Spring Framework的时候,你可能会想“不过是另一个的框架”。但Java社区中持续的高关注度,应该能暗示出Spring的特殊价值。
Spring 源自Rod Johnson(Spring Framework创始人)的在2002年出版的《Expert One-on- One J2EE Design and Development》。作为当年的Java开发者圣经,书中展现了Spring背后的基础性架构思考和对 J2EE厚重结构的系列反思。幸运的是, Rod Johnson坐言起行, 在书籍大卖后立刻动手将书中的思想转化为一个实际的开源项目— Spring Framework,在2003 年2 月起落户于SourceForge,从此掀起了一段POJO抛弃EJB的风潮,繁荣的开源Java 社区也帮助了它的茁壮成长。到了2004年,成立了 Interface21咨询公司,专门负责SpringFramework的培训、推广与咨询,与 JBoss商业化运作引来一片嘘声相比, Interface21成立时是一片四夷朝贺的盛况。随着05年4月1.2版本的发布,甚至对技术比较保守的金 融电信行业,都开始了对Spring的使用,世界10大银行,有5家在项目里使用了Spring。到了今年,Spring 2.0的推出又成为Java世 界的一件大事。
轻量级编程架构
POJO架构 基于IO(控制反转)和AOP(aspect- oriented programming)两项核心所搭建的POJO Ehanced架构,帮助你以坚持以POJOs来实现企业应用,而最后拥有企业服 务的能力,比如普通商业对象可以作为EJB SLSB,又或者摇身一变成为一个Web服务。POJOs不需要实现MBean接口就能获得JMX的管理能 力。
无侵入性架构 POJOs不用实现任的特定的接口,只需要在配置文件中声明就可以拥有获得容器底层的能力。比如POJOs不需要使用事务API就能获得事务管理,而且可以任意的在JTA与本地事务中切换。
微内核的架构 Spring的DI容器只有极微小的内核,提供最少的功能,而由FactoryBean与Bean Post-Processor扩展机制,在其上进行扩展出整个SpringFramework的功能。
Spring的核心部分共有六个主要功能模块:
Core 模块 是Spring框架最基础部分,实现了一个宣告式的无侵入性的轻量级IoC容器。
轻量级容器功能虽然也很轻量但很实用。依赖注入特的性消解了程序模块之间的耦合和代码中依赖关系的配置。而对象工厂去除了代码中的单例模式实现。另外宣告式的容器还提供了程序配置的统一入口,而不再散落在代码,XML与属性文件中。
DAO模块 提供了JDBC的抽象层与Spring JDBC实现。
抽象层的事务管理消除了以往JDBC编程中冗长的连接池获取与释放、事务管理异常处理的编码,转而以一种声明性事务管理方法,于配置文件中批量定义,不再需要在代码中使用特定的事务API来编码。
另外,抽象层还统一象了各数据库厂商的错误代码,自动完成翻译的工作,减少了在数据库库之间移植时所需修改的代码。
最后,Spring提供了Spring JDBC,一种简便的数据据库访问方案,作为在Hibernate,iBatis等ORM方案之外的另一选择。
orM模块 提供了常用的“对象/关系”映射框架的集成层。
Spring目前集成了包括JPA、JDO、Hibernate和iBatis在内的大部分主流ORM框架。Spring对它们的封装主要是使它们融入Spring的特性,如IOC和前边提到的简单声明性事务管理,另外也通过Template机制进行了一些简化的封装。
AOP模块 提供了符合面向方面的编程实现以及与AspectJ的集成。
尤 其在Spring2.0与AjpectJ紧密结合之后,Spring提供了一个良好的AOP式编程的环境,Spring的声明性企业服务多数建立在AOP 之上,其中最著名的是事务管理的功能。同时,你也可以方便的定义自己的方法拦截器和切点,实现代码中日志、缓存等方面的解耦,补充OOP(面向对象编程) 的不足。
Web模块 提供了对Struts,JSF, Tapestry以及WebWork这样的 第三方框架集成。也Spring提供了因为对其他MVC框架不满而自己重新实现的 Web 框架——SpringMVC。
JEE模块 提供了Java企业应用领域Remoting,JMS,JMX,JCA,EJB等功能的支持。
Spring 在企业应用的不断深入,也为轻量级Web应用容器提供了很多以往重量级服务器所提供的底层企业服务,并且比重量级容器更简便的方式来提供,比如Web服 务,JMX,JMS等都实现了POJOs的编程模式,不需要实现特定的接口,就可以把普通的POJOs商业对象导出成服务。
Spring 2.0的新特征
在上月刚刚正式发布的Spring 2.0,又有了下面值得关注的新特征:
可 扩展的XML编写 作为一个宣告式配置的框架,配置的简洁性是最为重要的。多亏了新的基于XML Schema的XML配置语法的产生,如,系列的简写让 Spring的事务配置简单了不少。更为重要的是,Spring为第三方框架开发者提供了自定义标签的接口,让他们可以与Spring一样为自己框架开发 简写标签。随着第三方框架开发者响应号召,未来的配置文件必将大幅瘦身,更加容易阅读和管理。
AOP与AspectJ的集成 随着 Java AOP领域真正老大AspectJ的创始人从IBM跳槽到Interface21,Spring的AOP模型也终于最后成熟。 Spring 2.0集成了AspectJ 的切入点语言,比往版AOP获得了丰富的方面与切面定义能力。同时2.0还支持使用AspectJ标记注解定 义的切面,把AOP更拉入了日常的编程中。
JPA的支持 在EJB3/JPA的产品将出未出之际,Spring已经提供了JPA抽象层,使用与Hibernate, Ibatis集成的相同模式,使开发人员可以熟悉的方式转到JPA开发,同时牢牢保住了自己的地盘不会受到JPA的冲击。
支持动态语言 使用动态语言编写的Bean现在已经可以装配到Spring的应用环境中,获得与Java对象同等的IOC,AOP的能力。表明了Spring对动态语言的态度,也表明了Java社区对RoR近来迅猛发展的响应。
异 步支持的完善 Spring2.0对JMS,JMX,JCA功能的支持都在进一步的完善之中。这些功能大家的感觉可能并不明显,但这些功能都是J2EE的 规范,也是传统应用服务器厂商相对比Java轻量级开源框架的优势项目。现在Spring的支持,其潜台词不言自明,意义不可谓不深远。
Porlet框架 Spring2.0 设计了一种概念上类似于Spring MVC框架的Porlet框架,同样体现了Spring的一种野心。
Spring MVC的默认约定 2.0的Spring MVC引入了不少默认的,不需要配置的约定,同样体现了Spring社区在支持动态语言之外,对Ruby on Rails 默认约定大于配置文件的思想的学习。
对Java 5的支持 Spring在一系列细微之处引入了Java5的annotation,泛型,可变参数等特征。
Spring2.0 在这几个方面的功能支持不是那么引入注目,毕竟普通Java Web应用很少使用这些方面。但是Spring提供这些功能的完善支持意义却很深远,因为这 些功能都是J2EE规范所要求提供的功能,也是传统应用服务器厂商相对比Java开源框架的传统优势项目。一旦Spring2.0对这些功能提供了完善的 支持,那么将传统的Java企业应用完全迁移到Spring框架上面的技术障碍就一扫而空了。
不难看出Spring是一个野心很大的框 架,从现在状况来看,Spring可以说是Java开源框架之集大成者,从未来来看,Spring将提供J2EE厂商所能够提供的所有必要的功能,最终 Spring将有可能取J2EE规范而代之,成为Java企业开发的事实平台和事实标准。
但是毕竟Spring只是提供了一个轻量级应用的基础,如何结合Struts,Webwork,Hibernate, iBatis这些主流的Java框架,以怎样的模式构建简洁、轻量级的企业应用,仍然需要在实践中不断摸索。
Spring的六大核心模块
Spring的创始人Rod Johnson
J2EE曾经是Java世界的骄傲,基于J2EE的企业应用,在B/S架构逐渐引入企业应用软件开发领域之际,一下子甩开了老冤家微软,风风光光的占领了高端的市场。但它的复杂和繁琐,同时也让让Java从业员们头痛不已。
幸 亏,Java世界还有另一个更大的骄傲—无比繁荣的Java开源社区。随着 Spring Framework在这个所有开发语言中最好的社区中诞生,轻 量级架构抛弃EJB的大旗终于由Spring坚定举起,而且身后很快汇聚了一群同样有着 POJOs(plain old Java objects)信 念的开源项目仅仅追随。
有趣的是,为了应对轻量级架构的大势,Java各商业大佬之间磋商又磋商的推出了同样有着轻量级特征的 JavaEE 5标准。但仔细一看各位大佬的发布计划,就发现他们不再像以往那么热心了,IBM的新版应用服务器居然排到了2008——我们开奥运的好日 子才会发布。因为Spring 的发展已经太好,大佬们能赚到的钱已不多,导致了热情大减。所以,Spring作为一站式企业应用的基础,POJO轻量级 架构的母体之外,又多了一个 Java EE标准狙击者的定位。
下面让我们细看一下这个Java世界近年来最耀眼的项目。
又是一个框架?
第一次听到Spring Framework的时候,你可能会想“不过是另一个的框架”。但Java社区中持续的高关注度,应该能暗示出Spring的特殊价值。
Spring 源自Rod Johnson(Spring Framework创始人)的在2002年出版的《Expert One-on- One J2EE Design and Development》。作为当年的Java开发者圣经,书中展现了Spring背后的基础性架构思考和对 J2EE厚重结构的系列反思。幸运的是, Rod Johnson坐言起行, 在书籍大卖后立刻动手将书中的思想转化为一个实际的开源项目— Spring Framework,在2003 年2 月起落户于SourceForge,从此掀起了一段POJO抛弃EJB的风潮,繁荣的开源Java 社区也帮助了它的茁壮成长。到了2004年,成立了 Interface21咨询公司,专门负责SpringFramework的培训、推广与咨询,与 JBoss商业化运作引来一片嘘声相比, Interface21成立时是一片四夷朝贺的盛况。随着05年4月1.2版本的发布,甚至对技术比较保守的金 融电信行业,都开始了对Spring的使用,世界10大银行,有5家在项目里使用了Spring。到了今年,Spring 2.0的推出又成为Java世 界的一件大事。
轻量级编程架构
POJO架构 基于IO(控制反转)和AOP(aspect- oriented programming)两项核心所搭建的POJO Ehanced架构,帮助你以坚持以POJOs来实现企业应用,而最后拥有企业服 务的能力,比如普通商业对象可以作为EJB SLSB,又或者摇身一变成为一个Web服务。POJOs不需要实现MBean接口就能获得JMX的管理能 力。
无侵入性架构 POJOs不用实现任的特定的接口,只需要在配置文件中声明就可以拥有获得容器底层的能力。比如POJOs不需要使用事务API就能获得事务管理,而且可以任意的在JTA与本地事务中切换。
微内核的架构 Spring的DI容器只有极微小的内核,提供最少的功能,而由FactoryBean与Bean Post-Processor扩展机制,在其上进行扩展出整个SpringFramework的功能。
Spring的核心部分共有六个主要功能模块:
Core 模块 是Spring框架最基础部分,实现了一个宣告式的无侵入性的轻量级IoC容器。
轻量级容器功能虽然也很轻量但很实用。依赖注入特的性消解了程序模块之间的耦合和代码中依赖关系的配置。而对象工厂去除了代码中的单例模式实现。另外宣告式的容器还提供了程序配置的统一入口,而不再散落在代码,XML与属性文件中。
DAO模块 提供了JDBC的抽象层与Spring JDBC实现。
抽象层的事务管理消除了以往JDBC编程中冗长的连接池获取与释放、事务管理异常处理的编码,转而以一种声明性事务管理方法,于配置文件中批量定义,不再需要在代码中使用特定的事务API来编码。
另外,抽象层还统一象了各数据库厂商的错误代码,自动完成翻译的工作,减少了在数据库库之间移植时所需修改的代码。
最后,Spring提供了Spring JDBC,一种简便的数据据库访问方案,作为在Hibernate,iBatis等ORM方案之外的另一选择。
orM模块 提供了常用的“对象/关系”映射框架的集成层。
Spring目前集成了包括JPA、JDO、Hibernate和iBatis在内的大部分主流ORM框架。Spring对它们的封装主要是使它们融入Spring的特性,如IOC和前边提到的简单声明性事务管理,另外也通过Template机制进行了一些简化的封装。
AOP模块 提供了符合面向方面的编程实现以及与AspectJ的集成。
尤 其在Spring2.0与AjpectJ紧密结合之后,Spring提供了一个良好的AOP式编程的环境,Spring的声明性企业服务多数建立在AOP 之上,其中最著名的是事务管理的功能。同时,你也可以方便的定义自己的方法拦截器和切点,实现代码中日志、缓存等方面的解耦,补充OOP(面向对象编程) 的不足。
Web模块 提供了对Struts,JSF, Tapestry以及WebWork这样的 第三方框架集成。也Spring提供了因为对其他MVC框架不满而自己重新实现的 Web 框架——SpringMVC。
JEE模块 提供了Java企业应用领域Remoting,JMS,JMX,JCA,EJB等功能的支持。
Spring 在企业应用的不断深入,也为轻量级Web应用容器提供了很多以往重量级服务器所提供的底层企业服务,并且比重量级容器更简便的方式来提供,比如Web服 务,JMX,JMS等都实现了POJOs的编程模式,不需要实现特定的接口,就可以把普通的POJOs商业对象导出成服务。
Spring 2.0的新特征
在上月刚刚正式发布的Spring 2.0,又有了下面值得关注的新特征:
可 扩展的XML编写 作为一个宣告式配置的框架,配置的简洁性是最为重要的。多亏了新的基于XML Schema的XML配置语法的产生,如,系列的简写让 Spring的事务配置简单了不少。更为重要的是,Spring为第三方框架开发者提供了自定义标签的接口,让他们可以与Spring一样为自己框架开发 简写标签。随着第三方框架开发者响应号召,未来的配置文件必将大幅瘦身,更加容易阅读和管理。
AOP与AspectJ的集成 随着 Java AOP领域真正老大AspectJ的创始人从IBM跳槽到Interface21,Spring的AOP模型也终于最后成熟。 Spring 2.0集成了AspectJ 的切入点语言,比往版AOP获得了丰富的方面与切面定义能力。同时2.0还支持使用AspectJ标记注解定 义的切面,把AOP更拉入了日常的编程中。
JPA的支持 在EJB3/JPA的产品将出未出之际,Spring已经提供了JPA抽象层,使用与Hibernate, Ibatis集成的相同模式,使开发人员可以熟悉的方式转到JPA开发,同时牢牢保住了自己的地盘不会受到JPA的冲击。
支持动态语言 使用动态语言编写的Bean现在已经可以装配到Spring的应用环境中,获得与Java对象同等的IOC,AOP的能力。表明了Spring对动态语言的态度,也表明了Java社区对RoR近来迅猛发展的响应。
异 步支持的完善 Spring2.0对JMS,JMX,JCA功能的支持都在进一步的完善之中。这些功能大家的感觉可能并不明显,但这些功能都是J2EE的 规范,也是传统应用服务器厂商相对比Java轻量级开源框架的优势项目。现在Spring的支持,其潜台词不言自明,意义不可谓不深远。
Porlet框架 Spring2.0 设计了一种概念上类似于Spring MVC框架的Porlet框架,同样体现了Spring的一种野心。
Spring MVC的默认约定 2.0的Spring MVC引入了不少默认的,不需要配置的约定,同样体现了Spring社区在支持动态语言之外,对Ruby on Rails 默认约定大于配置文件的思想的学习。
对Java 5的支持 Spring在一系列细微之处引入了Java5的annotation,泛型,可变参数等特征。
Spring2.0 在这几个方面的功能支持不是那么引入注目,毕竟普通Java Web应用很少使用这些方面。但是Spring提供这些功能的完善支持意义却很深远,因为这 些功能都是J2EE规范所要求提供的功能,也是传统应用服务器厂商相对比Java开源框架的传统优势项目。一旦Spring2.0对这些功能提供了完善的 支持,那么将传统的Java企业应用完全迁移到Spring框架上面的技术障碍就一扫而空了。
不难看出Spring是一个野心很大的框 架,从现在状况来看,Spring可以说是Java开源框架之集大成者,从未来来看,Spring将提供J2EE厂商所能够提供的所有必要的功能,最终 Spring将有可能取J2EE规范而代之,成为Java企业开发的事实平台和事实标准。
但是毕竟Spring只是提供了一个轻量级应用的基础,如何结合Struts,Webwork,Hibernate, iBatis这些主流的Java框架,以怎样的模式构建简洁、轻量级的企业应用,仍然需要在实践中不断摸索。
![](http://diger.cn/attachments/month_0701/72007117121913.jpg)
Spring的六大核心模块
![](http://diger.cn/attachments/month_0701/g2007117122041.jpg)
Spring的创始人Rod Johnson