与简单属性相对的是关联属性和限制属性。这两种属性在运行或者设计时被修改后,可以自动地通知外部世界,或者有能力拒绝被设置为某个数值的属性。关联属性在属性发生改变时向其他beans和容器发出通知。关联属性在发生改变时产生一个PropertyChangeEvent事件,传递给所关联的注册了PropertyChangeListener的听众。可以通过下述方法注册或撤销多路广播事件听众:
public void addPropertyChangeListener(PropertyChangeListener
l);
public void removePropertyChangeListener(PropertyChangeListener
l);
JavaBean API还支持另一种方法用于注册监听器与特定的关联属性。如果一个bean开发者要在单个属性基础上提供监听器注册,他必须为每个这样的属性支持一对方法:add<PropertyName>Listener()和remove<PnropertyName>Listener()。这对方法工作起来就像前面介绍的那对全局事件监听器注册方法,只是这两个方法是用于特定的属性。下面的一个例子中定义了一个名为Name的关联属性的这两个方法:
public void addNameListener(PropertyChangeListener l);
public void removeNameListener(PropertyChangeListener l);
限制属性是内部验证的,如果不合格会被拒绝。用户可以通过异常获知拒绝的属性。限制属性用VetoableChangeListener接口验证改变。可以用如下方法注册或撤销该接口:
public void addVetoableChangeListener(VetoableChangeListener
v);
public void removeVetoableChangeListener(VetoableChangeListener
v);
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..