利用代理可以在运行时创建一个实现了一组给定接口的新类。该功能在编译时无法确定需要哪个接口时才有必要使用。
创建代理对象:需要使用Proxy类的newProxyInstance方法,这个方法有三个参数
- 类加载器
- 一个Class对象数组,每个元素都是需要实现的接口
- 一个调用处理器
代理类是在程序运行过程创建的,一但被创建就变成了常规类。
所有代理类都扩展于Proxy类,一个代理类只有一个实例域-----调用处理器,它定义在Proxy的超类中。
ArrayList 的动态代理类:
public static void main(String[] args) {
final List<String> list = new ArrayList<String>();
@SuppressWarnings("unchecked")
List<String> proxyInstance = (List<String>) Proxy.newProxyInstance(list
.getClass().getClassLoader(), list.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
return method.invoke(list, args);
}
});
proxyInstance.add("Hello gms");
System.out.println(list);
}
博客介绍了利用代理在运行时创建实现给定接口新类的方法,适用于编译时无法确定接口的情况。创建代理对象需使用Proxy类的newProxyInstance方法,介绍了其三个参数。还提到代理类运行时创建,创建后成常规类,所有代理类扩展于Proxy类,最后提及ArrayList的动态代理类。
4420

被折叠的 条评论
为什么被折叠?



