您的位置:首页 > 运维架构

PropertyChangeSupport类

2016-03-18 15:08 543 查看
先看PropertyChangeSupport类的官方文档解释:

This is a utility class that can be used by beans that support bound properties. You can use an instance of this class as a member field of your bean and delegate various work to it.

1.关联属性

在JavaBean的设计中,按照属性的不同作用又细分为四类:单值属性、索引属性、关联属性、限制属性。关联属性,也称之为绑定属性。绑定属性会在属性值发生变化时,通知所有相关的监听器。为了实现一个绑定属性,必须实现两个机制。

1) 无论何时,只要属性的值发生变化,该bean必须发送一个PropertyChange事件给所有已注册的监听器。

2) 为了使监听器能够注册,bean必须实现以下两个方法:void addPropertyChangeListener(PropertyChangeListener listener);

void removePropertyChangerListener(PropertyChangerListener listener);

2.使用PropertyChangeSupport管理监听器

可以通过java.bean包下的PropertyChangeSupport类来管理监听器。要使用这个类,bean必须有一个此类的数据域。private PropertyChangeSupport listeners = new PropertyChangeSupport(this);

这样可以将添加和移除监听器的任务交给这个对象。public void addPropertyChangeListener(PropertyChangeListener listener) {

listeners.addPropertyChangeListener(listener);

}

public void removePropertyChangeListener(PropertyChangeListener listener) {

listeners.removePropertyChangeListener(listener);

}

当bean的属性发生变化时,使用PropertyChangeSupport对象的firePropertyChange方法,会将一个事件发送给所有已经注册的监听器。该方法有三个参数:属性的名字、旧的值以及新的值。属性的值必须是对象,如果是简单数据类型,则必须进行包装。listeners.firePropertyChange("ourString", oldString, newString);

所有注册的监听器实现PropertyChangeListener接口,该接口中只有一个方法。public void propertyChange(PropertyChangeEvent e)

当bean的属性值发生变化时,该方法中的代码就会被触发。可以通过e.getOldValue();

e.getNewValue();

来得到changes.firePropertyChange("ourString", oldString, newString);中的oldString和newString。

3.为什么要使用PropertyChangeSupport

使用这个类管理监听器的好处是,它是线程安全的。如果使用一个循环体来set Bean的属性,则这个类可以保证所有监听器执行触发事件的有序。

还有一个好处是,这个类支持fire带索引的属性改变事件(详见java.bean.IndexedPropertyChangeEvent)。此时向注册的监听器发送一个PropertyChangeEvent的方法为:void fireIndexedPropertyChange(String PropertyName,int index,Object oldValue,Object newValue)

4.实例代码 

public class SomeBean {

private String property;

private PropertyChangeSupport changeSupport;

public void setProperty(String newValue) {

String oldValue = property;

property = newValue;

changeSupport.firePropertyChange("property", oldValue, newValue);

}

public void addPropertyChangeListener(PropertyChangeListener l) {

changeSupport.add(l);

}

public void removePropertyChangeListener(PropertyChangeListener l) {

changeSupport.remove(l);

}

}

最近看代码一直碰到这个类,先做一个总结。

先看PropertyChangeSupport类的官方文档解释:

This is a utility class that can be used by beans that support bound properties. You can use an instance of this class as a member field of your bean and delegate various work to it.

1.关联属性

在JavaBean的设计中,按照属性的不同作用又细分为四类:单值属性、索引属性、关联属性、限制属性。关联属性,也称之为绑定属性。绑定属性会在属性值发生变化时,通知所有相关的监听器。为了实现一个绑定属性,必须实现两个机制。

1) 无论何时,只要属性的值发生变化,该bean必须发送一个PropertyChange事件给所有已注册的监听器。

2) 为了使监听器能够注册,bean必须实现以下两个方法:void addPropertyChangeListener(PropertyChangeListener listener);

void removePropertyChangerListener(PropertyChangerListener listener);

2.使用PropertyChangeSupport管理监听器

可以通过java.bean包下的PropertyChangeSupport类来管理监听器。要使用这个类,bean必须有一个此类的数据域。private PropertyChangeSupport listeners = new PropertyChangeSupport(this);

这样可以将添加和移除监听器的任务交给这个对象。public void addPropertyChangeListener(PropertyChangeListener listener) {

listeners.addPropertyChangeListener(listener);

}

public void removePropertyChangeListener(PropertyChangeListener listener) {

listeners.removePropertyChangeListener(listener);

}

当bean的属性发生变化时,使用PropertyChangeSupport对象的firePropertyChange方法,会将一个事件发送给所有已经注册的监听器。该方法有三个参数:属性的名字、旧的值以及新的值。属性的值必须是对象,如果是简单数据类型,则必须进行包装。listeners.firePropertyChange("ourString", oldString, newString);

所有注册的监听器实现PropertyChangeListener接口,该接口中只有一个方法。public void propertyChange(PropertyChangeEvent e)

当bean的属性值发生变化时,该方法中的代码就会被触发。可以通过e.getOldValue();

e.getNewValue();

来得到changes.firePropertyChange("ourString", oldString, newString);中的oldString和newString。

3.为什么要使用PropertyChangeSupport

使用这个类管理监听器的好处是,它是线程安全的。如果使用一个循环体来set Bean的属性,则这个类可以保证所有监听器执行触发事件的有序。

还有一个好处是,这个类支持fire带索引的属性改变事件(详见java.bean.IndexedPropertyChangeEvent)。此时向注册的监听器发送一个PropertyChangeEvent的方法为:void fireIndexedPropertyChange(String PropertyName,int index,Object oldValue,Object newValue)

4.实例代码 

public class SomeBean {

private String property;

private PropertyChangeSupport changeSupport;

public void setProperty(String newValue) {

String oldValue = property;

property = newValue;

changeSupport.firePropertyChange("property", oldValue, newValue);

}

public void addPropertyChangeListener(PropertyChangeListener l) {

changeSupport.add(l);

}

public void removePropertyChangeListener(PropertyChangeListener l) {

changeSupport.remove(l);

}

}

 

 

最近看代码一直碰到这个类,先做一个总结。

先看PropertyChangeSupport类的官方文档解释:

This is a utility class that can be used by beans that support bound properties. You can use an instance of this class as a member field of your bean and delegate various work to it.

1.关联属性

在JavaBean的设计中,按照属性的不同作用又细分为四类:单值属性、索引属性、关联属性、限制属性。关联属性,也称之为绑定属性。绑定属性会在属性值发生变化时,通知所有相关的监听器。为了实现一个绑定属性,必须实现两个机制。

1) 无论何时,只要属性的值发生变化,该bean必须发送一个PropertyChange事件给所有已注册的监听器。

2) 为了使监听器能够注册,bean必须实现以下两个方法:void addPropertyChangeListener(PropertyChangeListener listener);

void removePropertyChangerListener(PropertyChangerListener listener);

2.使用PropertyChangeSupport管理监听器

可以通过java.bean包下的
4000
PropertyChangeSupport类来管理监听器。要使用这个类,bean必须有一个此类的数据域。private PropertyChangeSupport listeners = new PropertyChangeSupport(this);

这样可以将添加和移除监听器的任务交给这个对象。public void addPropertyChangeListener(PropertyChangeListener listener) {

listeners.addPropertyChangeListener(listener);

}

public void removePropertyChangeListener(PropertyChangeListener listener) {

listeners.removePropertyChangeListener(listener);

}

当bean的属性发生变化时,使用PropertyChangeSupport对象的firePropertyChange方法,会将一个事件发送给所有已经注册的监听器。该方法有三个参数:属性的名字、旧的值以及新的值。属性的值必须是对象,如果是简单数据类型,则必须进行包装。listeners.firePropertyChange("ourString", oldString, newString);

所有注册的监听器实现PropertyChangeListener接口,该接口中只有一个方法。public void propertyChange(PropertyChangeEvent e)

当bean的属性值发生变化时,该方法中的代码就会被触发。可以通过e.getOldValue();

e.getNewValue();

来得到changes.firePropertyChange("ourString", oldString, newString);中的oldString和newString。

3.为什么要使用PropertyChangeSupport

使用这个类管理监听器的好处是,它是线程安全的。如果使用一个循环体来set Bean的属性,则这个类可以保证所有监听器执行触发事件的有序。

还有一个好处是,这个类支持fire带索引的属性改变事件(详见java.bean.IndexedPropertyChangeEvent)。此时向注册的监听器发送一个PropertyChangeEvent的方法为:void fireIndexedPropertyChange(String PropertyName,int index,Object oldValue,Object newValue)

4.实例代码 

public class SomeBean {

private String property;

private PropertyChangeSupport changeSupport;

public void setProperty(String newValue) {

String oldValue = property;

property = newValue;

changeSupport.firePropertyChange("property", oldValue, newValue);

}

public void addPropertyChangeListener(PropertyChangeListener l) {

changeSupport.add(l);

}

public void removePropertyChangeListener(PropertyChangeListener l) {

changeSupport.remove(l);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: