标签:
<span style="font-family:Microsoft YaHei;">public interface Dog {
// info 方法声明
public void info();
// run 方法声明
public void run();
}</span><span style="font-family:Microsoft YaHei;">public class DogImpl implements Dog {
@Override
public void info() {
System.out.println("我是一仅仅小小狗");
}
@Override
public void run() {
System.out.println("我奔跑迅速");
}
}</span>
<span style="font-family:Microsoft YaHei;">public class DogIntercepter {
// 第一个拦截器方法
public void method1() {
System.out.println("********** 通用模拟方法一 *********");
}
// 第二个拦截器方法
public void method2() {
System.out.println("********** 通用模拟方法二 *********");
}
}</span><span style="font-family:Microsoft YaHei;">public class ProxyHandler implements InvocationHandler {
// 需被代理的目标对象
private Object target;
// 创建拦截器实例
DogIntercepter di = new DogIntercepter();
// 运行代理的目标方法时,该invoke方法会被自己主动调用
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = null;
// 假设被调用方法的方法名为info
if ("info".equals(method.getName())) {
// 调用拦截器方法 1
di.method1();
result = method.invoke(target, args);
// 调用拦截器方法 2
di.method2();
} else {
result = method.invoke(target, args);
}
return result;
}
// 用于设置传入目标对象的方法
public void setTarget(Object target) {
this.target = target;
}
}</span><span style="font-family:Microsoft YaHei;">public class TestDog {
/**
* @param args
*/
public static void main(String[] args) {
// 创建一个Dog实例,该实例将被作为代理的目标对象
Dog targetObject = new DogImpl();
Dog dog = null;
// 以目标对象创建代理
Object proxy = MyProxyFactory.getProxy(targetObject);
if (proxy instanceof Dog) {
dog = (Dog) proxy;
}
// 測试代理的方法
dog.info();
dog.run();
}
}</span>标签:
原文地址:http://www.cnblogs.com/gcczhongduan/p/4180173.html