我的理解,不知道是不是准确地,你参考下。动态代理就是在运行时根据被代理类(目标类)生成代理类(要用到反射的知识),实际开发过程中是利用被代理类的字节码来生成代理类的,所以代理类必须知道自己需要实现被代理类的哪些方法(getProxyClass(ClassLoader loader, Class<?>... interfaces)方法中的interfaces参数就是这些需要实现的接口的字节码),但是这里的代理类还不能实例化,因为代理类的方法最终调用的还是被代理类的方法(看Proxy的构造函数就知道还要InvocationHandler
的实例对象),只要我们实现了InvocationHandler
这个接口就能实例化代理类,也就创建了代理类。InvocationHandler
接口的实例对象实际上就是代理类的方法具体实现,包括被代理类方法以外的一些附加方法(例如计算程序运行时间啊等等)。
最后总结你的问题:
1,动态:就是在运行时产生;(哪几个方面的动态我就不知道怎么回答了)
2,代理:通过第三方来访问本可以直接访问的目标;
3,作用:在不修改源代码的情况下,添加一些用监测和检测程序运行的方法。
再次强调,这是我的理解,不知道准不准确,只能参考下。 |