IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Java technology  >

developerWorks: java : JavaBeans In, JavaBeans Out

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Ajay Apte, Ping Chen, Stephen Gest, David Morrill, Mike Weis, Component Technology

2001 年 5 月 01 日

摘要:IBM新推出的BeanExtender是创建和开发纯JavaBean的有力工具。它提供一种用简易和可扩展的方法让用户能够用一系列Bean作为构件来开发新的Bean。这些Bean的范围很广,可以是可视的控件,也可以是抽象的商业对象。创建Bean的方法也多种多样。包括直接的事件联接,手写代码的事件处理,内部Bean API的公开和公开新的API。开发出的新bean 还可以通过使用属性编辑器及版面编辑器进一步被定制。最后,开发出的Bean可以用 Bean 的持续模型来进行储存。储存的Bean可以直接使用,作为模板使用或者作为"cookie-cutter" 使用。

概论

很多Java集成开发环境都致力于开发基于Web浏览器的Java Applet或者孤立的Java 应用程 序。但它们忽略了对于Bean的开发。开发JavaBean的好处在于它使开发者能够使用复用他们自己的或他人的Bean. IBM的新产品BeanExtender就是这样一款产品。它能使开发者在组装多个Bean后得到的结果仍是Bean。 组装Bean的方法是事件的直接联接,手写代码的事件联接以及Bean内部及新增API的公开。

本文摘要描述了一个名片应用程序的需求,所需用的Bean的细节,并且演示在 BeanExtender 中如何使用 Bean 作为构件创建新Bean的不同方法。 本文假设读者具有Java, JavaBeans 以及 AWT的知识。





回页首


名片应用程序样例

让我们来研究一个简单的例子: 用现存的JavaBean构建一个名片应用程序。完成后的应用程序我们想要它如图所示:


图 1.名片应用程序样例
bright ideas - business card example
  • 动态gif:闪烁的灯泡
  • 公司名称 gif
  • 地址
  • 人名
  • 一至两个电话号码

因为想要可复用的应用程序, 该应用程序还必须生成一个JavaBean,并包括以下的可变属性:

  • 动态 gif 文件名
  • 公司名字符串及相应 gif 文件名
  • 地址字符串
  • 人名字符串
  • 电话号码 1 字符串
  • 电话号码 2 字符串

为使卡片显得有趣,我们还要让动态GIF文件在鼠标进入显示人名的区域时播放五遍。为使 卡片有用,我们还要使得当鼠标在任何一个显示的属性上点击时它能发出事件和相应的属 性值。





回页首


创建显示版面

第一件任务就是用一些JavaBean构件搭成我们需要的名片版面的样子。这里我们可以使用动态GIFbean,GIF浏览器bean,以及一些文本bean。您可以使用您喜爱的开发环境来做这件事,例如IBM Visual Age for Java 及IBM VisualAge WebRunner。





回页首


让灯泡闪烁

播放动态GIF需要多做些工作。首先我们要把人名这个文本 Bean 的"mouse enter" 事件联接到动态GIF上。如图所示:


图 3.事件联接
event connection

简单的事件联接在这里还不够。一般来说,当收到"mouse enter"这个事件后,动画会不停的播放,而我们只需要它播放五次。要解决这个问题,我们要在联接中引入一些逻辑。我们把它叫做"scrpting"也就是“手写联接”bean. 在手写的事件联接中,可以使用scripting语言,(如 NetREXX) 也可以使用Java语言本身来联入额外的逻辑处理。在本文的后面还要讲到这些额外的逻辑。


图4. 手写事件联接
scripted event connection




回页首


以Bean制Bean

我们现在有了一套 联接好的Bean它们看起来就象一个Bean。 那么我们如何能使它们运作起 来也象一个bean呢? 答案是"公开" 。我们把内部bean的属性加上新的“名片”名字予以公 开,创建新的属于“名片”的属性并且隐藏其它属性。

应该注意,以上的解决方案是在无需接触任何Bean的源代码的情况下实现的。我们所需要做 的只是使用Bean的公共属性,事件,接口和方法。我们可以使用来源和用途各不相同的 Bean 并通过BeanExtender所提供的事件联接,scripting联接以及公开特性将它们联接成一个具有一 定功能的复合Bean.





回页首


装配界面(Assembly surface)

BeanExtender的特性是通过客户端( assembly surface.)来访问的。 通过这个界面,我们可以 进行事件联接,scripting联接以及特性的公开。这些特性由装配界面中的页来表示。下图是 装配界面中当文本和GIF Bean被添加和适当改名后的一个视图。





回页首


直接事件联接

多数JavaBean集成开发环境(IDE)提供事件联接模型。有些IDE使用可视线索,例如在要联接的两个Bean间画线并确定要触发的方法。有些 IDE 使用树形图或表形图。下面是BeanExtender的 event connections list view,(事件联接表形图),表示Bean之间与属性变化有关的几个事件联接。当PersonName bean的底色属性变化时, Address bean,PhoneNum bean,以及FaxNum bean 的底色也随之变化。

直接事件联接当Bean比较简单或者是为联接而设计的时候工作效果良好。





回页首


手写事件联接

多数 JavaBean的 IDE 提供方法来靠手写代码联接Bean。典型方法是Java代码。这可能需要一个两步的过程: 手写一个新的方法;再把某个事件联接到这个方法上。

BeanExtender提供了一种multiple-scripting language解决方案,将上述的两步方法合并为一步。BeanExtender version 1.2 支持的语言有 Java 和 NetREXX。以后还会增加更多的语言,例如 JavaScript及Visual Basic。还可能增加对一个Bean的多语言支持。下图是 BeanExtender Scripting IDE, 显示"mouse enter" 事件所附的手写代码。 (PersonName bean). 这些代码使得鼠标进入人名区域时动态GIF Bean循环播放动画五次。

图中所示的是缺省scripting IDE界面,但它还允许插入其它界面风格。

手写代码事件联接在Bean不是为联接而开发时使用效果最佳。





回页首


新增和内部Bean界面的公开

没有很多JavaBean的IDE提供可以定义输出的Bean的界面的机制。换句话说就是当用户打开一个Bean时,看到的只是它力面还嵌套了几个Bean.而这几个Bean里可能又嵌套了Bean.

BeanExtender则能够公开所输出的Bean的API。它能够通过指定新的属性/方法/事件(1)以及重新公开内部Bean的属性/方法/事件的方法来做到这一点。另外, BeanExtender允许对内部bean的编辑结果保存在输出的Bean里。这样就允许输出的Bean能够在稍后被打开并重新编缉内部的Bean界面。这被称做 "深层挖掘" 支持。

下图中,我们通过 重新公开内部Bean的属性 以及定义新方法和事件来定义一个输出 Bean.

这种公开机制非常有利于改变Bean的行为,建立新的用户资源类型-URT(User Resource Type)以及扩展/限制一个Bean的行为。

下图显示要公开的属性,新事件和新方法在 publish view of the assembly surface(装配界面的公开视图)中的显示结果

下两张图显示bean装配器在公开一个新事件(the BusinessCardDataEvent), 这个事件当任何一个显示属性的区域被鼠标点击时就被发出供有兴趣的用户使用。 图 11 显示这个事件的抽象图,而图12显示 装配界面图


图11.BusinessCardDataEvent事件的抽象图
abstract view of publishing a businesscarddataevent




回页首


"黑箱"和复用

应该注意,以上的三个特点都是嵌入结果的名片Bean中的。也就是说, 都是隐藏着的。这就使生成的Bean成为一个黑箱,可以一次又一次的复用。





回页首


总结

IBM的BeanExtender背后的准则是:输入纯JavaBean,得到纯JavaBean。. BeanExtender使用不同的方法用来源各异的构件编译成新的Java bean。

BeanExtender 在 IBM's alphaWorks Web site. 可以找到。BeanExtender可以集成进 JavaBeans 开发工具,如IBM VisualAge for Java 和 IBM VisualAge WebRunner..

注:Sun Microsystems JavaBeans API Specification version 1.01,( http://www.javasoft.com/beans).

参考资料

  1. BeanExtender Technology in IBM software catalog,
    ( http://www.ibm.com/software/ad/javabeans/beanextender).
  2. Factoring Java Beans for the Enterprise (IBM ITSO Redbook). Addison-Wesley Publishing Company, 1997.
  3. IBM alphaWorks ( http://www.alphaworks.ibm.com/).
  4. WebRunner Web site.( http://www.ibm.com/software/ad/taligent/).


关于作者

Ajay Apte, Ping Chen, Stephen Gest, David Morrill, Mike Weis
The authors are part of the component technology team at IBM in Austin, Texas. This team is currently developing BeanExtender based on JavaSoft's JavaBeans specification. They develop and run this code on Windows NT(TM), Windows 95(TM), OS/2, and AIX. The team members hold many patents and internal IBM awards. Their technical focuses span the range of components, database access, graphics, compilers, visual builders, and scripting. The team has also worked on the component technologies OpenDoc and Taligent CommonPoint Frameworks.




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款