动态代理两个重要的组成: Proxy 与 InvocationHandlerhtml
Hello1 hello = (Hello1) Proxy.newProxyInstance(Hello.class.getClassLoader(),new Class[]{Hello1.class},new HelloProxy<HelloWorld>(new HelloWorld()));
public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces, InvocationHandler h)数组
第一个类加载器, 目前以为这个理解的不到位,由于要生成一个在内存中的代理对象,须要一个类加载器器,日常post
第二个参数,被代理对象的全部接口,假如 hello 实现了 Hello 、 Hello1 这两个接口,这个参数 就变数,两个接口组成的 class数组, 参数的目的是: 本质上实际上是多态, 这样this
Proxy.newProxyInstance(hello.getClass().getClassLoader(), hello.getClass().getInterfaces(), this); 这个方法能够 强制转换成Hello 也能够是 Hello1代理
第三个参数 这个参数 要实现 InvocationHandler 接口htm
InvocationHandler 要实现的方法以下:对象
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
三个参数: proxy 这个感受没有用上blog
这样的是第二个参数: method 这个是被代理类的接口层的实现方法的Class 对象,好比有个方法 sayHello 这个就是sayHello 的class 对象,而后经过反射机制 去调用这个方法接口
第三个参数 就是方法使用到的参数内存