动态代理的本质,就是反射机制实现
>>>>> 万能的自动生成代理类的class
// 自动生成代理类
public class ProxyInvocationHandler implements InvocationHandler {
//被代理的接口
private Object target;
public void setTarget(Object target) {
this.target = target;
}
// 生成得到代理类
public Object getProxy() {
return Proxy.newProxyInstance(this.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}
// 处理代理实例,并返回结果
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//动态代理的本质,就是反射机制实现
Object result = method.invoke(target, args);
return result;
}
}
>>>>> 对应的测试类(UserServiceImpl 类实现了UserService 类,使用了delete方法进行测试)
public class Client { public static void main(String[] args) { // 真实角色 UserServiceImpl userService = new UserServiceImpl(); // 代理角色,不存在 ProxyInvocationHandler pih = new ProxyInvocationHandler(); // 设置要代理的对象 pih.setTarget(userService); // 动态生成代理类 UserService proxy = (UserService) pih.getProxy(); proxy.delete(); } }