Java如何侦听bean的属性更改事件?

在此示例中,我们将监听bean的属性更改事件。我们创建一个名为的小bean MyBean,添加属性和getter / setter。我们想知道或在bean属性名称更改时得到通知。

首先,我们需要在PropertyChangeSupportBean中添加一个字段,使用该对象将触发属性更改事件。当我们需要倾听更改时,我们必须创建一个实现PropertyChangeListener。在此示例中,我们仅将MyBean类用作侦听器。

该PropertyChangeListener有一个名为方法propertyChange,并且此方法中,我们将执行代码来获取触发的事件由PropertyChangeSupport。

package org.nhooo.example.bean;

import java.beans.PropertyChangeSupport;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.io.Serializable;

public class MyBean implements PropertyChangeListener, Serializable {
    private Long id;
    private String name;

    private PropertyChangeSupport pcs = new PropertyChangeSupport(this);

    public MyBean() {
        pcs.addPropertyChangeListener(this);
    }

    /**
     * This method gets called when a bound property is changed.
     *
     * @param evt A PropertyChangeEvent object describing the event source
     *            and the property that has changed.
     */
    public void propertyChange(PropertyChangeEvent evt) {
        System.out.println("Name      = " + evt.getPropertyName());
        System.out.println("Old Value = " + evt.getOldValue());
        System.out.println("New Value = " + evt.getNewValue());
    }

    public static void main(String[] args) {
        MyBean bean = new MyBean();
        bean.setName("My Initial Value");
        bean.setName("My New Value");
        bean.setName("My Yet Another Value");
    }


    //〜--------------------------------------------- Bean的Getter和Setter

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        String oldValue = this.name;
        this.name = name;

        // 触发属性更改事件
        pcs.firePropertyChange("name", oldValue, name);
    }
}