一直对 Java 动态代理 不是很理解。最近有时间就仔细看了一下相关的代码,然后也参考了一些网友的文章,终于有点感觉了,也不知道对不对,如果有网友看到有哪里不对的地方,欢迎指导。
代理模式 就是将被代理的对象交给代理对象去执行(不是直接去调用被代理对象),然后代理对象在调用被代理对象的时候就可以再加上一些自己的方法(呵呵,感觉 Spring的 AOP 有点像这样,也有点像 拦截器)。
之前接触过的一个应用是这样的,程序分为客户端和服务端,客户端的环境和服务端的环境有所不同,客户端不可能直接调用服务端的代码。当客户端请求服务端时,先将需要的类名传递给 Java 的 InvocationHandler,通过 Proxy 的
得到被代理对象,然后执行被代理对象的方法的时候在
代理模式 就是将被代理的对象交给代理对象去执行(不是直接去调用被代理对象),然后代理对象在调用被代理对象的时候就可以再加上一些自己的方法(呵呵,感觉 Spring的 AOP 有点像这样,也有点像 拦截器)。
之前接触过的一个应用是这样的,程序分为客户端和服务端,客户端的环境和服务端的环境有所不同,客户端不可能直接调用服务端的代码。当客户端请求服务端时,先将需要的类名传递给 Java 的 InvocationHandler,通过 Proxy 的
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
{
...
}
得到被代理对象,然后执行被代理对象的方法的时候在
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
...
}
中通过 HttpURLConnection 将方法名和参数发送给 服务端,服务端拿到 类名,方法名和参数后做相应处理,然后将方法的执行结果通过 response 里面返回给客户端(是不是有些像 RMI)。