对动态代理(DynamicProxy)的理解

1、动态代理属于AOP(面向切面编程)的一种思想。
2、代理对象和被代理对象都实现了相同接口。
3、动态代理是指系统根据要代理的接口,自动帮我们生成并编译和加载代理类(实现了要代理接口),并将代理类中的代理逻辑抽象到 InvocationHandler 中,由开发者实现。静态代理中,我们需要自己实现代理类,将代理逻辑也写在代理类里面。而动态代理省去了我们自己写代理类的工作,系统只需要知道要代理的接口,然后利用反射获取接口的方法信息,生成代理类,代理类其实只是些模板代码,而又为了能定制代理逻辑,系统便定义了一个 InvocationHandler,代理类中的方法都会调用 InvocationHandler 中的invoke方法,并将代理类对象,接口的方法对象,方法参数传入。所以真正的代理逻辑在 InvocationHandler 类中;

public static Object newProxyInstance(ClassLoader loader,
                                      Class<?>[] interfaces,
                                      InvocationHandler h)

Proxy.newProxyInstance方法用来生成代理,并返回代理接口实例,对该实例调用的方法,都会转移到代理类中。
loader 参数用来加载自动生成的代理类,interfaces 参数为要代理的接口数组,h参数为我们要自己实现的代理逻辑类。

public Object invoke(Object proxy, Method method, Object[] args)
    throws Throwable;

InvocationHandler 的invoke方法中, proxy 参数是系统帮我们生成的代理类对象,method参数为当前调用的方法对象,args为方法的参数。

你可能感兴趣的:(android)