快速业务通道

基于Eclipse RCP简化IoC实现 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
or中:

com.onjava.servicelocator.ServiceLocator.service(this);

完成这一工作的ASM方法可以通过下列指令来实现:

//mv是一个ASM方法访问者,这是一个允许方法操作的类 mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn( INVOKESTATIC, "com/onjava/servicelocator/ServiceLocator", "service", "(Ljava/lang/Object;)V");

第一条指令把对this对象的参考加载到将在第二条指令使用的栈上,这里调用了ServiceLocator类的一个静态方法。

基于Eclipse RCP简化IoC实现(5)

时间:2011-01-05 天极 朱先忠

五.Eclipse RCP应用程序举例

现在,我们已经为构建示例应用程序作好了准备。

我们的示例应用程序用于实现向用户展示其感兴趣的警句和引用语-例如fortune cookies。它由下面四个插件组成:

Service Locator插件,它实现IoC框架

FortuneService插件,它实现管理fortune cookies的服务

FortuneInterface插件,它"发行"存取服务的公共接口

这个FortuneClient插件,它实现Eclipse应用程序并且在Eclipse视图中显示格式化的警句

我们采用的IoC设计使服务实现独立于客户端;现在,该服务实现可以被修改了,而同时不影响客户端。图2展示了插件之间的依赖性。

基于Eclipse RCP简化IoC实现 - 编程入门网

图2.插件之间的依赖性:ServiceLocator和接口定义使服务与客户端分离开来。

正如在前一节中所描述的,Service Locator将把客户端和该服务绑定到一起以便向用户显示警句。这个FortuneInterface只定义了公共接口IFortuneCookie,客户端用它来存储cookie消息:

public interface IFortuneCookie {   public String getMessage(); }

这个FortuneService插件提供了一个简单的服务工厂-由它负责创建IfortuneCookie的实现:

public class FortuneServiceFactory implements IServiceFactory {   public Object getServiceInstance()   throws ServiceException {    return new FortuneCookieImpl();   }   // ...省略... }

这个工厂被注册到Service locator插件作为一种Eclipse扩展,如其plugin.xml描述符文件所展示的:

<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.0"?> <plugin> <extension point="com.onjava.servicelocator.servicefactory"> <serviceFactory class="com.onjava.fortuneservice.FortuneServiceFactory" id="com.onjava.fortuneservice.FortuneServiceFactory" name="Fortune Service Factory" resourceClass="com.onjava.fortuneservice.IFortuneCookie"/> </extension> </plugin>

基于Eclipse RCP简化IoC实现(6)

时间:2011-01-05 天极 朱先忠

在此,resourceClass属性定义由这个工厂提供的服务的类。这个被描述的服务为定义在FortuneClient插件中的Eclipse视图所用:

@Serviceable public class View extends ViewPart {   public static final String ID = "FortuneClient.view";   private IFortuneCookie cookie;   @Injected(optional=false)   public void setDate(IFortuneCookie cookie) {    this.cookie = cookie;   }   public void createPartControl(Composite parent){    Label l = new Label(parent,SWT.WRAP);    l.setText("Your fortune cookie is:\n" + cookie.getMessage());   }   public void setFocus() {} }

请注意,这里使用了Serviceable和Injected注解来定义对于外部服务的依赖性。最终结果是,createPartControl()能够自由地使用cookie对象-在它已经被成功地初始化的保证下。这个示例

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号