public interface Subject //定义一个接口Subject
{
public void request(); //抽象方法 request
}
public class RealSubject implements Subject //定义一个类实现接口Subject
{
public void request() //覆盖接口中的抽象方法 request
{
System.out.println("I'm the Real Subject!");
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
//定义一个类 DynamicProxy 实现接口 InvocationHandler
public class DynamicProxy implements InvocationHandler
{
private Object sub; //定义一个Object类型变量sub
public DynamicProxy()
{
}
//定义构造函数参数为Object对象
public DynamicProxy(Object sub)
{
this.sub = sub;
}
//覆盖接口中的方法
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
System.out.println("附加的方法1");
method.invoke(sub, args); //调用method中的方法参数为 sub args
System.out.println("附加的方法2");
return null;
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Client
{
public static void main(String[] args)
{ //创建RealSubject的对象 rs
RealSubject rs = new RealSubject();
//接口指向实现它的类对象 ds 参数为 rs
InvocationHandler ds = new DynamicProxy(rs);
//????
Class<?> cls = rs.getClass();
//????
Subject sub = (Subject)Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), ds);
sub.request();
}
}
这是Spring AOP 中的一个动态代理的例子
前边的我都看懂了,但是后边主函数中的我标记出 //????的实在不明白什么意思
Class<?> cls = rs.getClass();
Subject sub = (Subject)Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), ds);
|