Ernest,
This can be quite easily accomplished using AspectJ. Here is the code:
All one needs to do is include concrete aspects such as following. All the details are taken care in the reusable base aspect:
The above aspect enables the required property change notification functionality in the Person class. You may use wildcards to enable multiple classes in one go. For example, the following declare statement would make all the classes in com.javaranch.beans to implement the property-change functionality:
Here is a
test class that exercises the solution:
Here is the output when we compile all the sources and run the Test class.
Here is the base aspect that does all the magic. You need to write such an aspect only once (or never, if you use the one I provide :-) ). Then you can include in any project and enable the desired functionality by writing simple subaspects like PersonBeanMakerAspect or JavaRanchBeanMakerAspect.
You will need to be familiar with the AspectJ syntax to really understand what�s going on. Basically, we add the default implementation to BeanSupport interface and advise all set*() methods of classes implementing BeanSupport to fire an event.
Here is a boring implementation of the Person class, for completeness:
I hope this helps.
-Ramnivas
[ September 18, 2003: Message edited by: Ramnivas Laddad ]