代理相当于中介,可以通过代理目标对象的方法,对方法进行增强(类似装饰者设计模式),可以在目标方法执行之前/之后添加一些业务逻辑(例如权限控制)。可以实现AOP面向切面编程的思想(过滤器)。
ProxyTest.java(测试类):
package com.xxx.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyTest {
public static void main(String[] args) {
final Target target = new Target(); //目标对象。 匿名内部类InvocationHandler中使用的对象必须是final修饰的。
//获得动态的代理对象----在运行时,在内存中动态的为Target创建一个虚拟的代理对象
//动态创建代理对象proxyObj,根据参数确定到底是哪个目标对象的代理对象
TargetInterface proxyObj = (TargetInterface) Proxy.newProxyInstance(
target.getClass().getClassLoader(), //与目标对象相同的类加载器
target.getClass().getInterfaces(), // 目标对象实现的接口的字节码对象(数组) (创建的代理对象也会实现这些接口)
n