1   
2   
3   package samples;
4   
5   import java.beans.*;
6   import java.lang.reflect.*;
7   import net.sf.cglib.proxy.*;
8   
9   /***
10   *
11   * @author  baliuka
12   */
13  public class Beans implements MethodInterceptor {
14      
15      private PropertyChangeSupport propertySupport;
16     
17      public void addPropertyChangeListener(PropertyChangeListener listener) {
18          
19          propertySupport.addPropertyChangeListener(listener);
20          
21      }
22      
23      public void removePropertyChangeListener(PropertyChangeListener listener) {
24          propertySupport.removePropertyChangeListener(listener);
25      }
26      
27      public static  Object newInstance( Class clazz ){
28          try{
29              Beans interceptor = new Beans();
30              Enhancer e = new Enhancer();
31              e.setSuperclass(clazz);
32              e.setCallback(interceptor);
33              Object bean = e.create();
34              interceptor.propertySupport = new PropertyChangeSupport( bean );
35              return bean;
36          }catch( Throwable e ){
37              e.printStackTrace();
38              throw new Error(e.getMessage());
39          }
40          
41      }
42      
43      static final Class C[] = new Class[0];
44      static final Object emptyArgs [] = new Object[0];
45  
46  
47      public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
48          Object retValFromSuper = null;
49          try {
50              if (!Modifier.isAbstract(method.getModifiers())) {
51                  retValFromSuper = proxy.invokeSuper(obj, args);
52              }
53          } finally {
54              String name = method.getName();
55              if( name.equals("addPropertyChangeListener")) {
56                  addPropertyChangeListener((PropertyChangeListener)args[0]);
57              }else if ( name.equals( "removePropertyChangeListener" ) ){
58                  removePropertyChangeListener((PropertyChangeListener)args[0]);
59              }
60              if( name.startsWith("set") &&
61                  args.length == 1 &&
62                  method.getReturnType() == Void.TYPE ){
63              
64                  char propName[] = name.substring("set".length()).toCharArray();
65              
66                  propName[0] = Character.toLowerCase( propName[0] );
67                  propertySupport.firePropertyChange( new String( propName ) , null , args[0]);
68              
69              }
70          }
71          return retValFromSuper;
72      }
73      
74      public static void main( String args[] ){
75          
76          Bean  bean =  (Bean)newInstance( Bean.class );
77          
78          bean.addPropertyChangeListener(
79          new PropertyChangeListener(){
80              public void propertyChange(PropertyChangeEvent evt){
81                  System.out.println(evt);
82              }
83          }
84          );
85          
86          bean.setSampleProperty("TEST");
87          
88          
89      }
90      
91      
92  }
This page was automatically generated by Maven