<struts2权威指南>的一个例子,是用JDK动态代理来实现拦截器功能。JDK动态代理只能对实现了接口的实例来生成代理。
首先一个接口:
Dog.java    
package my;
public interface Dog
{
    
public void info();
}

实现接口的一个实例(DogImpl.java):
package my;
public class DogImpl implements Dog
{
    
public void info()
    
{
        System.out.println(
"我就是我");
    }

}
定义一个拦截DogImpl类的实例(DogIntercepter.java):
package my;
public class DogIntercepter
{
    
public void method1()
    
{
        System.out.println(
"拦截器的方法1");
    }

    
public void method2()
    
{
        System.out.println(
"拦截器的方法2");
    }

}
下面需要一个实现InvocationHanlder接口的代理类(ProxyHander.java):
package my;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationHandler;
public class ProxyHandler implements InvocationHandler
{
    
private Object target;
    DogIntercepter di 
= new DogIntercepter();
    
public Object invoke(Object proxy,Method method,Object[] args)throws Exception
    
{
        Object result 
= null;
        
if(method.getName().equals("info"))
        
{
            di.method1();
            result 
= method.invoke(target,args);
            di.method2();
        }

        
else{
            result 
= method.invoke(target,args);
        }

        
return result;
    }

    
public void setTarget(Object o)
    
{
        
this.target = o;
    }

}
代理工厂类(MyProxyFactory.java),用来根据目标对象生成代理对象:

package my;
import java.lang.reflect.Proxy;
public class MyProxyFactory
{
    
public static Object getProxy(Object object)
    
{
        ProxyHandler handler 
= new ProxyHandler();
        handler.setTarget(object);
        
return Proxy.newProxyInstance(DogImpl.class.getClassLoader(),object.getClass().getInterfaces(),handler);
    }

}
主程序(TestDog.java):
package my;
public class TestDog
{

    
public static void main(String[] args)
    
{
        Dog targetObject 
= new DogImpl();
        Dog dog 
= null;
        Object proxy 
= MyProxyFactory.getProxy(targetObject);
        
if (proxy instanceof Dog)
        
{
            dog 
= (Dog)proxy;
        }

        dog.info();
    }

}
ok.使用动态代理实现了拦截器的功能.