javabean特征简介

 1. 属性

  Bean的属性描述其外观或者行为特征,如颜色、大小等。属性可以在运行时通过get/set方法取得和设置。最终用户可以通过特定属性的get/set方法对其进行改变。例如,对于Bean的颜色属性,最终用户可以通过Bean提供的属性对话框改变这个颜色属性。颜色的改变实际上是通过下面的方法实现的:

    public Color getFillColor();
    public void SetFillColor(Color c);

  这种基本的get/set方法命名规则定义的属性叫做简单属性。简单属性中有一类用boolean值表示的属性叫布尔属性。

  JavaBean API还支持索引属性,这种属性与传统Java编程中的数组非常类似。索引属性包括几个数据类型相同的元素,这些元素可以通过一个整数索引值来访问,因此称为索引属性。属性可以索引成支持一定范围的值,这种属性属于简单属性。索引用int指定。索引属性有4种访问方式,其数值数组可以一个元素访问,也可以整个数组访问:

    public void setLabel(int index,String label);
    public String getLabel(int index);
    public void setLabel(String []labels);
    public String []getLabels();

  与标准的Java数组类似索引值可能会在索引属性数组的范围之外。这时,用于操作索引属性的访问者方法一般是抛出一个ArrayIndexOutOfBoundsException运行环境异常,这个异常与标准Java数组索引超出范围时执行的行为相同。

  与简单属性相对的是关联属性和限制属性。这两种属性在运行或者设计时被修改后,可以自动地通知外部世界,或者有能力拒绝被设置为某个数值的属性。关联属性在属性发生改变时向其他beans和容器发出通知。关联属性在发生改变时产生一个PropertyChangeEvent事件,传递给所关联的注册了PropertyChangeListener的听众。可以通过下述方法注册或撤销多路广播事件听众:
   public void addPropertyChangeListener(PropertyChangeListener l);
   public void removePropertyChangeListener(PropertyChangeListener l);

  PropertyChangeListener是一个接口,当相关的外部部件需要与一个属性相关联时,它必须调用addPropertyChangeListener()方法提供一个合适的实现了PropertyChangeListener接口的对象。PropertyChangeListener接口用于报告关联属性的修改,尤其是当一个关联属性值发生变化时,就调用所有注册的PropertyChangeListener接口上的propertyChange()方法。这个方法接受一个PropertyChangeEvent对象,这个对象包含了关于要修改的特定属性的信息及其新值和旧值。 
 

  从bean发送一个属性修改通知给一个监听器。监听器必须先注册bean,然后才通过检查随通知发送来的PropertyChangeEvent对象决定修改了的特定属性。

  JavaBean API还支持另一种方法用于注册监听器与特定的关联属性。如果一个bean开发者要在单个属性基础上提供监听器注册,他必须为每个这样的属性支持一对方法:add<PropertyName>Listener()和remove<PnropertyName>Listener()。这对方法工作起来就像前面介绍的那对全局事件监听器注册方法,只是这两个方法是用于特定的属性。下面的一个例子中定义了一个名为Name的关联属性的这两个方法:
    public void addNameListener(PropertyChangeListener l);
    public void removeNameListener(PropertyChangeListener l);

  当bean外部相关部件要将其本身注册到Name属性上时,它只需简单地调用addNameListener()方法来注册它本身。当Name属性修改时,会通过调用propertyChange()方法发送一个通知给事件监听器。这种情况与前面介绍的一样,只是这里的监听器只接收关于Name属性的通知。

  限制属性是内部验证的,如果不合格会被拒绝。用户可以通过异常获知拒绝的属性。限制属性用VetoableChangeListener接口验证改变。可以用如下方法注册或撤销该接口:
    public void addVetoableChangeListener(VetoableChangeListener v);
    public void removeVetoableChangeListener(VetoableChangeListener v);

  限制属性和关联属性的处理机制是很类似的,当属性的修改值到达监听器的时候,监听器可以通过抛出PropertyVetoException异常选择拒绝属性的修改。如果抛出了一个异常,这个bean就要负责处理这个异常并恢复这个限制属性的原来的值。

  与关联属性类似,限制属性也支持单个属性的事件监听方法。下面是一个例子:
    public void addNameListener(VetoableChangeListener l);
    public void removeNameListener(VetoableChangeListener l);

 2. 内省和定制

  Bean通常被开发成一般化的组件,由开发人员在建立应用程序时配置。这是通过JavaBeans API伴随的两种Java技术实现的。第一种是Java反映API,是一组用于透视类文件和显示其中的属性和方法的类。第二种是Java串行化API,用于生成类的永久存储,包括其当前状态。这两种技术用于使Beans可以用建立工具探索和显示,并修改和存放起来,供特定应用程序使用。

  JavaBean的内省过程显示Bean的属性、方法和事件。内省过程实际上很简单,如果有设置或取得属性类型的方法,则假设Bean有该属性,可以采用如下方法:
    public <PropertyType> get<PropertyName>();
    public void set<PropertyName>(<PropertyType> p);

  如果只发现一个get/set方法,则确定PropertyName为只读或只写。

  除了上述这种内置的内省和定制方法外,JavaBean API还提供了显示的接口BeanInfo,用于Bean设计者显示Bean的属性、事件、方法和各种全局信息。可以通过实现BeanInfo接口定义自己的Bean信息类:
    public class myBeanInfo implements BeanInfo..

  BeanInfo接口提供了一系列访问Bean信息的方法,Bean开发者还可以提供BeanInfo类用于定义Bean信息的专用描述文件。

 3. 持续

  JavaBean是依赖于状态的组件,状态可能因为运行时或开发时的一些动作而发生改变,当Bean的状态改变时,设计人员可以保存改变的状态,这种机制叫JavaBean的持续。

  JavaBean状态的持续可以通过java对象的串行化机制自动保存,也可以由设计者通过定制其串行化控制Bean对象的状态的保存。

 4. 事件

  JavaBean通过传递事件在Bean之间通信。Bean用一个事件告诉另一个Bean采取一个动作或告诉其状态发生了改变。事件从源听众注册或发表并通过方法调用传递到一个或几个目标听众。

  JavaBean的事件模型类似AWT的事件模型。JavaBean中的事件模型是用事件源和事件目标定义的。事件源就是事件的启动者,由它触发一个或多个事件目标。事件源和事件目标建立一组方法,用于事件源调动事件听众。

  本节介绍了JavaBean的基本概念和JavaBean的一些内部机制,现在你应该已经知道JavaBean是个什么东西,而且你对JavaBean内部遵循的规范和一些实现的细节也有了一定的了解,比如你应该知道JavaBean有什么特征,
也应该对其中的机制有一定的了解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值