利用Spring框架改进J2EE编程
日期:2007年7月8日 作者: 查看:[大字体 中字体 小字体]-
摘要
J2EE编程正在变得越来越复杂。J2EE已经发展为一个API、复杂化的编程和配置的复杂网络。为了应对这种复杂性,新的框架和方法不断涌现。这些框架高度依赖于一个称为IoC(Inversion of Control,反向控制)的概念。本文将探讨这种方法的一些特性和优点,因为这种方法与J2EE编程相关,而且可以使J2EE编程变得更轻松。
简介
马克·吐温的一句话常被引用:“……关于我死亡的报道是一种夸张。”现在已经出现了很多关于.Net的流言,以及认为J2EE API的复杂性无法克服和EJB作为一种组件架构即将灭亡的流行极客(geek)文化。从学术或者只是想像的立场来看,这没什么大不了的,但事实是J2EE/EJB API已经经历了一场达尔文式的进化。具有DCOM或CORBA项目经验的读者会明白我的意思。过去,人们都乐于听闻EJB组件模型的美好前景。实际情况是,人们在与J2EE相关的各个方面都投入巨大。宣布抛弃以前的所有工作并重新组织,这种想法看起来也许有理,但是它并没有建立在良好的业务洞察力之上。EJB继续发展,而术语、实践和框架也随之涌现(spring up),它们弥补了J2EE API的不足。我说的不是“Spring出现(up)”,对吧?
我是一名顾问,职责是帮助构建大型的分布式应用程序,而且通常是J2EE应用程序。因此,我有机会亲历许多项目的整个生命周期。另外我还能够将我从一个刚刚完成的项目中刚刚学到的东西直接带入一个全新的项目。从某种意义上说我的“自然选择”过程加快了。我可以说最近Spring(更具体地说就是IoC,即反向控制)已经越来越多地融入到我的项目中了。在本文中,我将从支持或增强J2EE项目的角度来探讨Spring。更确切地讲,Spring框架能够标准化许多J2EE最佳实践,还能同类化(homogenize)许多无处不在的J2EE模式。接下来我们将浏览Spring庞大体系中的一小部分内容,重点介绍(依我浅见)能够帮助改进J2EE应用程序的功能。
IoC简介
一般来说,IoC是一种管理类之间关联的技术。没错,就这么简单!任何人都不是孤立的,对于各个对象来说也是如此。应用程序中的对象是相互依赖的。通过编程方式来表现这种依赖性通常既冗长又容易出错。好的IoC框架将声明式地(通过一个XML配置文件)而不是编程式地(这种方式的可靠性较差)——串连起应用程序之间的相互依赖性。
自由使用接口是IoC开发的一个主要方针。接口编程大大提高了应用程序的灵活性,从而增强了声明式的关联。接口实现是通过IoC配置在运行时声明的,这样就能够在不影响或少影响实际应用程序代码的情况下“重建(rewire)”关联。这在各种IoC框架中是反复提及的一个主题,一般而言,也是应该遵循的良好实践。
一个小例子
我喜欢通过例子来更快地理解概念。下面就是运用了IoC的一组例子;您将看到,这些例子的复杂性是逐递增的。大多数人在一开始使用IoC容器时都是利用其依赖注入(inject dependency)功能——即,声明式地将对象关联起来。利用IoC有助于创建更整洁的代码,如有必要重建对象之间的关联,一般来说对于这些代码也会更灵活、更容易。IoC的优点远不止依赖注入,而其扩展功能确是以依赖注入程序为起点的。
我们将从构建简单的依赖注入例子开始。第一个例子用于阐明已经提及的两个概念。第一个概念是IoC在运行时构建和关联对象的能力,第二个是与接口编码相结合而产生的灵活性。首先假定架构师递交了图1所示的UML。

图1. 接口可插性
这个小例子表示一个温度测量系统。几个传感器对象属于不同的类型,但都实现了ProtocolAdapterIfc接口,因此在将它们插入TemperatureSensor对象时,它们是可互换的。在需要TemperatureSensor时,系统中的某个实体必须知道要生成并与该传感器对象关联的ProtocolAdapterIfc的具体类型。在本例中,该传感器可基于命令行参数、数据库中的行或通过属性文件进行配置。本例还不足以造成挑战或展示一个复杂框架,但它足以阐明IoC基础。
但是,想象一下:在一个相当复杂的应用程序中这种情况屡屡发生,而您还希望能动态地——至少要在外部——改变对象关联。假设有一个DummyProtocolAdapter,它总是返回42这个值,使用它来进行测试。为什么不提供一个单个的统一框架?——让开发人员能够依靠该框架,以一种一致的、外部配置的方式建立类之间的关联,并且不引起工厂单元素类(factory singleton classe)的异常增加。这听起来可能没什么大不了,但它要依赖于IoC的简单性。
我们使用一个TemperatureSensor类,它与一个实现ProtocolAdapterIfc接口的类有关联。TemperatureSensor将使用该委托类来获得温度值。如UML图所示,在实现ProtocolAdapterIfc并且随后可用于该关联的应用程序中有若干个类。我们将使用IoC框架(在本例中是Spring)来声明要使用的ProtocolAdaperIfc的实现。Spring将在运行时建立关联。我们先来看XML代码,它将实例化TemperatureSensor对象并将一个ProtocolAdapterIfc实现与它关联起来。该代码如下所示:<bean id="tempSensor" class="yourco.project.sensor.TemperatureSensor"> <property name="sensorDelegate"> <ref bean="sensor"/> </property> </bean> <!-- Sensor to associate with tempSensor --> <bean id="sensor" class="yourco.project.comm.RS232Adapter"/> - [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页
-
- 利用Spring框架改进J2EE编程 相关文章:
- ·利用Spring框架改进J2EE编程
- 利用Spring框架改进J2EE编程 相关软件
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
精品推荐
热点TOP10
- ·一个Struts实现分页,增删改查,Tiles,国际化的DEMO
- ·学习教程:Java Annotation 高级应用
- ·Windows XP下PHP+MySQL环境搭建
- ·smarty技术学习,修改php模板的一点体会
- ·PHP中的sprintf()函数的学习研究笔记
- ·PHP技巧:使用APC缓存优化PHP程序
- ·windows下Apache2+php4+MySql5集成简明教程
- ·PHP预定义变量
- ·突破Windows 2003 PHP服务器的新思路
- ·用Apache反向代理设置对外的WWW和文件服务器
- ·Mysql的常用命令
- ·如何在Form域中Post大于100K字节的数据
- ·详细学习PHP中对文件和目录的操作方法
- ·急速搭建属于自己的Discuz!6论坛
- ·如何利用PHP会话显示出当前在线的用户
- ·PHP编程中break及continue两个流程控制指令
- ·PHP项目将联合起来转向PHP5
- ·初学解决疑惑:PHP是什么?
- ·Discuz!5.5 JS的调用
- ·PHP4将结束更新并在明年退出历史的舞台
特别推荐
- ·PHP入门指导:如何学习PHP?
- ·Php+Mysql注入专题
- ·PHP:实现给上传图片加水印的程序代码
- ·PHP动态网站开发中常用的8个小技巧
- ·PHP初学者:配置Apache服务器并且设置DNS
- ·初学PHP指导:php.ini 配置详细选项
- ·好文分享:PHP入门的学习方法
- ·急速搭建属于自己的Discuz!6论坛
- ·PHP入门:初学来看配置文件PHP.INI的中文注释
- ·php.ini配置,php.ini 中的 php-5.2.0 配置指令详解
- ·总结:一些PHP学习过程中的心得和经验
- ·新手入门:JSP初学者必须掌握的语法点
- ·PHP技巧:PHP脚本编程中的文件系统函数库
- ·详细讲解PHP编程中分页显示的制作
- ·成为PHP编程高手应该遵循的三个准则
- ·谈谈生成静态页面的一些经验
- ·新手入门:详细解述七个软件开发的原则
- ·简单的webservice开发例子
- ·PHP木马攻击的防御之道
- ·基础入门:动态网页制作PHP中Session的概念
