http://cglib.sourceforge.net/官网上的文档写得少得可怜,例子等于没有,还不能运行,编译通不过
就拿这个例子来说,Bean类根本就找不到。package cglib;import java.beans.*;
 import java.lang.reflect.*;
 import net.sf.cglib.proxy.*;
  public class Beans implements MethodInterceptor {
     
     private PropertyChangeSupport propertySupport;
    
     public void addPropertyChangeListener(PropertyChangeListener listener) {
         
         propertySupport.addPropertyChangeListener(listener);
         
     }
     
     public void removePropertyChangeListener(PropertyChangeListener listener) {
         propertySupport.removePropertyChangeListener(listener);
     }
     
     public static  Object newInstance( Class clazz ){
         try{
             Beans interceptor = new Beans();
             Enhancer e = new Enhancer();
             e.setSuperclass(clazz);
             e.setCallback(interceptor);
             Object bean = e.create();
             interceptor.propertySupport = new PropertyChangeSupport( bean );
             return bean;
         }catch( Throwable e ){
             e.printStackTrace();
             throw new Error(e.getMessage());
         }
         
     }
     
     static final Class C[] = new Class[0];
     static final Object emptyArgs [] = new Object[0];
 
 
     public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
         Object retValFromSuper = null;
         try {
             if (!Modifier.isAbstract(method.getModifiers())) {
                 retValFromSuper = proxy.invokeSuper(obj, args);
             }
         } finally {
             String name = method.getName();
             if( name.equals("addPropertyChangeListener")) {
                 addPropertyChangeListener((PropertyChangeListener)args[0]);
             }else if ( name.equals( "removePropertyChangeListener" ) ){
                 removePropertyChangeListener((PropertyChangeListener)args[0]);
             }
             if( name.startsWith("set") &&
                 args.length == 1 &&
                 method.getReturnType() == Void.TYPE ){
             
                 char propName[] = name.substring("set".length()).toCharArray();
             
                 propName[0] = Character.toLowerCase( propName[0] );
                 propertySupport.firePropertyChange( new String( propName ) , null , args[0]);
             
             }
         }
         return retValFromSuper;
     }
     
     public static void main( String args[] ){
         
         Bean  bean =  (Bean)newInstance( Bean.class );
         
         bean.addPropertyChangeListener(
         new PropertyChangeListener(){
             public void propertyChange(PropertyChangeEvent evt){
                 System.out.println(evt);
             }
         }
         );
         
         bean.setSampleProperty("TEST");
         
         
     }
     
     
 }