动态代理模式(泛讲):
1. 什么是动态代理模式?
动态代理模式中的代理类是由工具类或工厂类动态生成的,而不是由程序员手工定义的。代理关系是在程序运行过程中确立的。
2. 使用动态代理模式需要注意的几点:
1)动态代理模式中不用定义代理类。
2)目标对象是在客户类中创建的。原因:因为工具类或工厂类在生成代理类时,需要目标对象,而工具或工厂类是由客户类调用的,由客户类调用工具或工厂类生成代理类,并创建代理对象。
3)由于目标对象在客户类中创建,所以这种代理模式,无法实现保护和隐藏目标对象的目的。使用动态代理模式的目的是在不修改目标类的前提下,增强目标方法的功能。
4)由于代理类是由工具类或工厂类动态生成的,其生成过程具有一般性,可以为任何目标类生成代理类及代理对象。不同的目标类其增强需求是不同的,是具有个性化的。这个个性化功能增强,代理类委托给了另外一个类E实现。这个类E称为委托类。
5)使用静态代理模式和动态代理模式的目的是不同的:
a. 使用静态代理模式的目的是:保护和隐藏目标对象;
b. 使用动态代理模式的目的是:在不修改目标类的前提下,增强目标对象。
JDK 的 Proxy 动态代理
(1) 使用要求:目标类必须要实现业务接口,使用JDK的Proxy动态代理,要求目标类必须是实现接口的类。(即目标方法是接口里的方法)
(2) 动态代理类的名称:
名称由 3 部分构成: $ + Proxy + 数字 (其中数字表示当前JDK的Proxy生成的代理类的索引,索引从0开始计数。)
动态代理模式时序图流程 (以JDK的Proxy动态代理为例)
JDK的 Proxy 动态代理方法 回调流程分析
委托类 相当于回调中的 Some 类,invoke()方法 相当于回调方法;
JDK的Proxy类 相当于回调中的Third类(起传递的作用<回调方法的变形形式中>);
动态代理类 相当于 回调中的 Other类