package DomancyProxy; public interface Subject { void request(); }
package DomancyProxy; public interface Subject1 { void response(); }
package DomancyProxy; public class RealSubject implements Subject,Subject1 { @Override public void request() { // TODO Auto-generated method stub System.out.println("real subject request"); } @Override public void response() { // TODO Auto-generated method stub System.out.println("real subject response"); } }
package DomancyProxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class DomancyInvohandler implements InvocationHandler { RealSubject rs; public DomancyInvohandler(RealSubject rs) { this.rs=rs; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before request"); if(rs!=null) { method.invoke(rs, args); } System.out.println("end request"); return null; } }
package DomancyProxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; public class Client { /** * @param args */ public static void main(String[] args) { RealSubject rs=new RealSubject(); InvocationHandler ih=new DomancyInvohandler(rs); Subject1 s1=(Subject1) Proxy.newProxyInstance(ih.getClass().getClassLoader(), new Class[]{Subject1.class}, ih); s1.response(); System.out.println("-------------------------------------------------------"); Subject s2=(Subject) Proxy.newProxyInstance(ih.getClass().getClassLoader(), new Class[]{Subject1.class,Subject.class}, ih); s2.request(); System.out.println("-------------------------------------------------------"); Subject s=(Subject) Proxy.newProxyInstance(ih.getClass().getClassLoader(), rs.getClass().getInterfaces(), ih); s.request(); System.out.println("-------------------------------------------------------"); System.out.println(s.getClass()); System.out.println(s1.getClass()); System.out.println(s2.getClass()); } }
运行结果:
before request
real subject response
end request
-------------------------------------------------------
before request
real subject request
end request
-------------------------------------------------------
before request
real subject request
end request
-------------------------------------------------------
class $Proxy2
class $Proxy0
class $Proxy1