Proxy:生成动态代理实例的
InvocationHandler:调用处理程序并返回结果的
万能的自动生成代理类。
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;
}
}
public static void main(String[] args) {
//真实角色
UserServiceImpl userService = new UserServiceImpl();
//代理角色,不存在
ProxyInvocationHandler invocationHandler = new ProxyInvocationHandler();
//设置要代理的对象
invocationHandler.setTarget(userService);
//获取代理对象
UserService proxy = (UserService)invocationHandler.getProxy();
//执行方法
proxy.query();
}