回顾struts2拦截器的时候,顺便回顾一下用jdk方法实现的拦截器
-----------------------------------------------------定义一个接口,invok()方法需要传入一个接口参数--------------------------------------------
package proxy;
public interface Dog {
/**
* 用于测试的方法
*/
public void info();
public void run();
}
-----------------------------------------------实现类--------------------------------------------------------
package proxy;
public class DogImpl implements Dog {
public void info() {
// TODO Auto-generated method stub
System.out.println("输出动物的信息");
}
public void run() {
// TODO Auto-generated method stub
System.out.println("狗在跑");
}
}
-----------------------------------------------------拦截器类------------------------------------------------------------
package proxy;
/**
* 拦截器类
* @author Administrator
*
*/
public class DogIntercepter {
/**
* 定义第一个拦截方法
*/
public void method1(){
System.out.println("第一个拦截方法");
};
/**
* 定义第二个拦截方法
*/
public void method2(){
System.out.println("第二个拦截方法");
}
}
--------------------------------------------------*产生代理的工具类-----------------------------------------------------------
package proxy;
/**
* 根据传入的目标对象来创建代理类的工具
*/
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class ProxyHandler implements InvocationHandler {
//需被代理的目标对象
private Object target;
//创建拦截器实例
DogIntercepter di=new DogIntercepter();
//执行代理的目标方法时,该invoke方法会被自动调用
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result=null;
//如果被调用的方法的方法名为info
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 target) {
this.target = target;
}
}
-----------------------------------------------------------------由目标对象通过“产生代理的工具类”产生自己的代理-----------------------------------------
package proxy;
import java.lang.reflect.Proxy;
//工厂代理类,根据目标对象生成一个代理对象
public class MyFactoryProxy {
public static Object getObject(Object target){
/**
* 代理的处理类
*/
ProxyHandler handler=new ProxyHandler();
/**
* 将要处理的目标对象交给处理类
*/
handler.setTarget(target);
return Proxy.newProxyInstance(DogImpl.class.getClassLoader(),
target.getClass().getInterfaces(),handler);
}
}
---------------------------------------------------------------测试类--------------------------------------
package proxy;
public class MainTest {
public static void main(String args[]){
/**
* 创建dog实例
*/
Dog targetObject=new DogImpl();
/**
* 创建dog实例的代理
*/
Object proxy=MyFactoryProxy.getObject(targetObject);
/**
* 声明一个Dog对象
*/
Dog dog = null;
if (proxy instanceof Dog) {
dog = (Dog) proxy;
}
dog.info();
dog.run();
}
}