创建代理模式
1。参数1类的加载器
ClassLoder classloder = c.getClass().getClassLoader ();
//ClassLoder:从文档中对ClassLoader类的介绍可以总结出这个类的作用就是根据一个指定的类的全限定名,找到对应的Class字节码文件,然后加载它转化成一个java.lang.Class类的一个实例.
2. 一个interface对象数组,表示我们将要给我们的代理对象提供一组什么样的接口,如果我们提供了这样一个接口对象数组,那么也就是声明了代理类实现了这些接口,代理类就可以调用接口中声明的所有方法。
Class[] interfaces={Court.class};
第三个参数执行处理器用于定义方法的增强原则
3. InvocationHandler ih = new InvocationHandler(){
当代理对象调用了接口中的任何一个方法都会将该方法
以method对象的形式传入invoke方法
在invoke** 方法中我们可以手动判断是否执行手动处理返回结果添加代码增加功能
args 代理对象调用方法时传入的实参数组
proxy 代理对象**
public Object incoke(Object proxy,Method method,Object[] args){
System.out.println(“输入的内容”);
Object o = method.invoke(c,args);
System.out.println(“接收到的方法的返回值为”+o);
return o;
method.invoke()方法,用来执行某个的对象的目标方法
}
}. ;
Court cProxy = (Court)Proxy.newProxyInstance(classloder,interfaces,ih);
int res = cProxy.doCourt(10);
System.out.println(res);
}
通过Proxy类的newProxyInstance方法创建代理对象,我们来看下方法中的参数
* 第一个参数:people.getClass().getClassLoader(),使用handler对象的classloader对象来加载我们的代理对象
* 第二个参数:people.getClass().getInterfaces(),这里为代理类提供的接口是真实对象实现的接口,这样代理对象就能像真实对象一样调用接口中的所有方法
* 第三个参数:handler,我们将代理对象关联到上面的InvocationHandler对象上