快速业务通道

利用Spring框架改进J2EE编程 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
以的。

Spring已经具备了一种类似于包装EJB调用(在最后一节介绍)的机制,但遗憾的是它并不具备任何“通用”的东西,至少在异常软化意义上是这样的。但Spring的确有一个非常健壮的AOP(面向方面编程)框架,我们可以用它来逼近这种行为。下面是一个关于这种软化适用领域的(公认的)精心设计的例子。

我们再来看看本文前面已经开始探讨的一些概念。在第一节中我们介绍了一个基于远程传感器的小应用程序。现在我们继续探讨这个例子。我们将从一个简单的传感器接口开始介绍,该接口代码如下:

public interface ProtocolAdapterIfc { public Integer getRemoteSensorValue() throws CommChecksumFault, CommConnectFailure, CommPacketSequenceFault; }

利用Spring框架改进J2EE编程(6)

时间:2011-02-12 BEA Peter Braswell

这并没有什么特别之处。显然实现该接口的任何人都会获得一个远程值并将它返回给调用者。在此期间调用者可能要面对某些可怕的灾难,该接口可能抛出的已检查异常就是例证。

接下来我们来看该接口的一个实现程序。实现ProtocolAdapter的类是CarrierPigeon,其代码类似于:

public class CarrierPigeon implements ProtocolAdapterIfc { private boolean isTired = true; private boolean canFlapWings = false; public Integer getRemoteSensorValue() throws CommChecksumFault, CommConnectFailure, CommPacketSequenceFault { if(isTired && !canFlapWings ) { throw new CommConnectFailure("I''m Tired!"); } return new Integer(42); } }

为简洁起见,这里省略了属性的getter和setter方法。当调用getRemoteSensorValue()时,CarrierPigeon方法将检查它是否使用过度以及它还能否执行。如果它确是使用过度并且不能执行,我们将无法获得任何值,必须抛出CommConnectionFailure,它是一个已检查异常。到现在为止,一直都还不错。但别高兴得太早了!我已经决定不让应用程序编程人员应对“疲劳的信鸽”。可以将它包装在某种对象中,并在达到目的之前捕获异常,但必须处理20种不同的传感器。此外,我更喜欢对这些东西进行适度透明地处理,随着对该系统了解的增多,或许还会更改异常处理程序中的逻辑。我想要的是一个兼容API,应用程序编程人员能够使用它,并且随着时间的推移能够改变或增强。我想模板化异常处理,并让应用程序编程人员能够处理软的未检查异常,而不是硬异常。Spring非常符合这种情况。下面是为此而使用的策略的要点:

◆定义一个较软的消除已检查异常的最小接口。这就是应用编程人员将使用的接口。

◆使用Spring AOP结构,开发一个客户机调用和目标对象调用之间的拦截器,在本例中是“信鸽”。

◆使用Spring安装该拦截器并运行。

首先来看这个较软的接口:

public interface SensorIfc { public Integer getSensorValue(); }

请注意,在限定范围内可以重命名方法,使其更有意义。还可以消除已检查异常,就像这里所做的一样。接下来,也可能会更有趣的是我们想要让Spring将其注入调用栈的拦截器:

import org.aopalliance.intercept.MethodInterceptor; public class SensorInvocationInterceptor implements MethodInterceptor { public Object invoke(MethodInvocation invocationTarget) throws Throwable { // Return object reference Object o = null; // Convert it to the protocol interface type ProtocolAdapterIfc pai = (ProtocolAdapterIfc) invocationTarget.getThis(); try { o = pai.getRemoteSensorValue(); } catch (CommChecksumFault csf) { throw new SoftenedProtocolException( "protocol error

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号