Take a look at http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html
public class Test { PropertyChangeSupport pcs = new PropertyChangeSupport(this); private String name; private int age; public String getName() { return name; } public void setName(String name) { String oldName = this.name; this.name = name; pcs.firePropertyChange("name", oldName, name); } public int getAge() { return age; } public void setAge(int age) { int oldAge = this.age; this.age = age; pcs.firePropertyChange("age", oldAge, age); } public void addPropertyChangeListener(PropertyChangeListener listener) { pcs.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener listener) { pcs.removePropertyChangeListener(listener); } public Test(){ } public static void main (String[] args){ Test myTestObject = new Test(); myTestObject.addPropertyChangeListener(new MyPropertyChangeListener()); myTestObject.setAge(12); myTestObject.setName("Rick"); myTestObject.setName("Andrew"); } private static class MyPropertyChangeListener implements PropertyChangeListener { @Override public void propertyChange(PropertyChangeEvent event) { String clazz = event.getSource().getClass().getName(); System.out.println(clazz+"::"+event.getPropertyName()+" changed from "+event.getOldValue()+" to "+event.getNewValue()); } } }
This is a simple example, but using this approach, you can create different PropertyChangeListeners and provide different logic inside your propertyChange method. You can also run only changes on a small set of attributes, and not on all of them (without saving the oldValue and without starting the firePropertyChange PropertyChangeSupport method).
Of course, you can use AOP, but maybe you are looking for a solution similar to the one presented above. Hope this helps.
source share