标签:
package 设计模式; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; //主题接口 interface Isubject { public void f1(); public void f2(); } class Subject implements Isubject { @Override public void f1() { // TODO Auto-generated method stub System.out.println("调用方法1"); } @Override public void f2() { // TODO Auto-generated method stub System.out.println("调用方法2"); } } //静态代理类的实现 class StaticProxy implements Isubject { //被代理的对象 private Isubject real=null; public StaticProxy(Isubject real) { this.real =real; } @Override public void f1() { System.out.println("调用前处理"); real.f1(); System.out.println("调用后处理"); } @Override public void f2() { // TODO Auto-generated method stub System.out.println("调用前处理"); real.f2(); System.out.println("调用后处理"); } } class Handler implements InvocationHandler { private Isubject real=null; //一个实际主题 public Handler(Isubject real) { this.real=real; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before"+method.getName()); method.invoke(real, args); System.out.println("after"+method.getName()); return null; } } public class 动态代理2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //静态代理类的测试 Subject sub=new Subject(); //StaticProxy sp=new StaticProxy(sub); //sp.f1(); ClassLoader loader=sub.getClass().getClassLoader();//获得具体类的加载器 Class[] interfaces=sub.getClass().getInterfaces(); Handler h=new Handler(sub); Proxy proxy=(Proxy) Proxy.newProxyInstance(loader, interfaces, h); ((Isubject) proxy).f1(); ((Isubject) proxy).f2(); } }
标签:
原文地址:http://www.cnblogs.com/hansongjiang/p/3870460.html