1.被动态代理类需要实现一个接口
public interface Subject {
void request();
}
2.创建被动态代理类
public class RealSubject implements Subject{
@Override
public void request() {
System.out.println("real subject");
}
}
3.创建动态代理类
public class DynamicSubject implements InvocationHandler {
private Object sub;
public DynamicSubject(Object obj){
this.sub = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before");
method.invoke(this.sub, args);
System.out.println("end");
return null;
}
}
4.使用动态代理
public class Client {
public static void main(String[] args){
RealSubject rs = new RealSubject();
InvocationHandler ds = new DynamicSubject(rs);
Class<?> cls = rs.getClass();
Subject subject = (Subject) Proxy.
newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), ds);
subject.request();
System.out.println(subject.getClass());
//class com.sun.proxy.$Proxy0
System.out.println(subject.getClass().getSuperclass());
//class java.lang.reflect.Proxy
}
}
5.控制台打印效果
before
real subject
end
class com.sun.proxy.$Proxy0
class java.lang.reflect.Proxy