
上QQ阅读APP看书,第一时间看更新
5.1.2 动态代理
跟静态代理不同的是,动态代理的代理类是在运行时生成的。也就是说,动态代理类在程序运行时由Java反射机制动态生成,我们无须编写代理类的代码。
实现动态代理的步骤:
(1)定义一个委托类和公共接口。
(2)实现InvocationHandler接口,创建代理类的调用处理器。
(3)动态生成代理对象。
(4)通过代理对象调用方法。


动态代理会涉及两个重要的Java API:
(1)java.lang.reflect.Proxy:是Java动态代理机制生成的所有动态代理类的父类,提供了一组静态方法来为一组接口动态地生成代理类及其对象。
(2)java.lang.reflect.InvocationHandler:是调用处理器接口。它的invoke方法用于集中处理在动态代理类对象上的方法调用,通常在该方法中实现对委托类的代理访问。
我们先小结一下静态代理和动态代理的优缺点:
· 静态代理在编译时产生class字节码文件,效率高。但是静态代理只能为一个目标对象服务,如果目标对象过多,就会产生很多代理类。
· 动态代理必须实现InvocationHandler接口,通过反射代理方法,比较消耗系统性能。但是动态代理可以减少代理类的数量,使用更灵活。Java后端的很多框架大多采用这种方式。