动态代理模式(概念) / JDK 的 Proxy 动态代理

动态代理模式(泛讲):
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类

猜你喜欢

转载自www.cnblogs.com/lixinjie-98/p/10016625.html