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