用四个简单的类演示java的代理模式,注释写在代码中:
入口程序:
Client.java
package com.javasd.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Client {
public static void main(String[] args) {
RealSubject rs = new RealSubject();
//实例化代理类
InvocationHandler ds = new DynamicSubject(rs);
Class<?> cls = rs.getClass();
//入参解释:貌似jdk的代理只支持对接口的代理
//1、被代理类的classloader
//2、被代理类的接口
//3、代理类
Subject subject = (Subject) Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(),ds );
subject.request();
}
}
被代理的接口:
Subject.java
package com.javasd.proxy;
public interface Subject {
public void request();
}
接口的实现:
RealSubject.java
package com.javasd.proxy;
public class RealSubject implements Subject{
public void request() {
System.out.println("我是被代理的类");
}
}
代理类:
DynamicSubject.java
package com.javasd.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class DynamicSubject implements InvocationHandler {
private Object sub;
public DynamicSubject(){
}
public DynamicSubject(Object sub){
this.sub=sub;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("调用代理方法前!");
method.invoke(sub, args);
System.out.println("调用代理方法后!");
return null;
}
}
执行入口程序,控制台显示:
调用代理方法前!
我是被代理的类
调用代理方法后!