利用代理可以在运行时创建一个实现了一组给定接口的新类。该功能在编译时无法确定需要哪个接口时才有必要使用。
创建代理对象:需要使用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);
}