コーヒー豆

 まあ普通に

Bean.java

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

public class Bean implements Serializable {
    private String property;
    private PropertyChangeSupport support = new PropertyChangeSupport(this);

    public String getProperty() {
        return property;
    }

    public void setProperty(String property) {
        String old = getProperty();
        this.property = property;
        support.firePropertyChange("property", old, property);
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        support.addPropertyChangeListener(listener);
    }
}

BeanUser.java

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

public class BeanUser {
    public static void main(String[] args) {
        Bean bean = new Bean();
        bean.addPropertyChangeListener(new PropertyChangeListener() {
            public void propertyChange(PropertyChangeEvent e) {
                System.out.println("source: " + e.getSource() + ", property: " + e.getPropertyName() + ", old: " + e.getOldValue() + ", new: " + e.getNewValue());
            }
        });
        bean.setProperty("foo");
        bean.setProperty("bar");
    }
}