在代理类文中的ProxyTestII.java中创建动态类并调用。
方法一
package com.itheima.shipin.daili;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Collection;
public class ProxyTestII {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class clazzProxy = Proxy.getProxyClass(
Collection.class.getClassLoader(), Collection.class);
Constructor constructor = clazzProxy
.getConstructor(InvocationHandler.class);
class MyinvocationHanderTest implements InvocationHandler {
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("My MyinvocationHanderTest ");
return null;
}
}
Collection proxy1 = (Collection) constructor
.newInstance(new MyinvocationHanderTest());
proxy1.clear();
}
}
运行结果
My MyinvocationHanderTest
方法二
package com.itheima.shipin.daili;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Collection;
public class ProxyTestII {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class clazzProxy = Proxy.getProxyClass(
Collection.class.getClassLoader(), Collection.class);
Constructor constructor = clazzProxy
.getConstructor(InvocationHandler.class);
Collection proxy2=(Collection) constructor.newInstance(new InvocationHandler(){
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("constructor.newInstance");
return null;
}
});
proxy2.clear();
}
}
运行结果
constructor.newInstance
InvocationHandler
是代理实例的调用处理程序实现的接口。
Object invoke(Object proxy,
Method method,
Object[] args)
throws Throwable
在代理实例上处理方法调用并返回结果。
方法三
package com.itheima.shipin.daili;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Collection;
public class ProxyTestII {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Collection proxy3 = (Collection)Proxy.newProxyInstance( //匿名内部类
Collection.class.getClassLoader(),
new Class[]{Collection.class},
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("proxy.newProxyInstance");
return null;
}
});
proxy3.clear();
}
}
运行结果
proxy.newProxyInstance
newProxyInstance返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException