美文网首页
三种代理模式

三种代理模式

作者: NazgulSun | 来源:发表于2019-03-02 13:52 被阅读0次

上次说了一个装饰者模式,在不修改现有类的基础上,给其中的方法增加额外的功能,比如增加日志功能,事务功能等等,通过这种模式我们认为可以实现AOP。

当然在java中 实现AOP用的却是 Proxy代理模式,在我看来,如果只有一层装饰,装饰模式和 Proxy模式是可以互换的,区别是 装饰模式可以任意的组合装饰的功能,而proxy 模式通常只是 做一层代理,动态的添加一层的额外功能。

在java中实现代理模式通常有三个类型。

最简单的是静态代理模式:

iterface userDao{

  void save();

}

UserDaoImp  Implement userDao{

Void save(){

  dosave…

}

}

UserDaoProxy implement userDao{

      User Dao target ;

      Void save(){

              //start 事务

            target.save()

            //end 事务

      }

}

对于静态模式,针对每个接口都需要实写 Proxy,假设有10个 Dao 接口,如果要添加事务就需要写10个proxy,这个通常是不能接受的,所有才有 AOP模式,只要在需要加事务的地方,标识事务,就可以让java 自己添加 事务功能,这个就是动态代理。

java的动态代理,其实时对代理模式的动态生成,我们看到上面的模式时非常固定的,利用java 的反射,只要你传入一个要代理的接口 和  target 对象,就可以生存相应的 Proxy 类,也就是省去了 写10个Proxy

的重复工作。

在java 的Proxy包里实现代理模式,有一个前置条件,就是 target对象 必须要实现某个接口, 因为它内部逻辑是基于 接口创建新的类。

在有的情况下,我们可能想要代理一个类,他没有实现任何接口, Cglib 的proxy 可以实现这一点, 他使用了 子类继承的模式, 比如上述例子中,如果没有 实现userDao 接口,  UserDaoProxy 可以 extends UserDaoImpl,再 重写  save 方法就可以,  cglib 就是这样,你给他一个target 对象,他就动态 生成e子类, 比起java 的Proxy模式适应性更广一些,但是要引入新的 依赖包。

相关文章

  • JAVA代理模式深入了解(一)

    目前学习阶段,有问题请帮忙指出,谢谢 代理模式有三种: 静态代理模式 jdk动态代理模式 cglib动态代理模式 ...

  • Java的三种代理模式详解

    Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理...

  • 代理模式 java

    代理模式: 为其他对象提供一种代理以控制对这个对象的访问。代理模式主要有静态代理,动态代理,Cglib代理三种; ...

  • Java代理模式及三种方式

    导读 移动开发知识体系总章(Java基础、Android、Flutter) 代理模式简介 Java的三种代理模式 ...

  • 设计模式之代理

    设计模式之代理模式 一、定义 在Java中代理的实现一般分为三种:JDK静态代理、JDK动态代理以及CGLIB动态...

  • Java 代理

    静态代理 动态代理 JDK 提供的Proxy CGLib cglib | GitHub 参考文章 Java的三种代理模式

  • java设计模式之代理

    概述 java代理模式分为三种 静态代理 动态代理 Cglib代理 作用:给某一个对象提供代理对象,并由代理对象控...

  • 六大原则 动态代理

    参考 六大原则 代理模式 介绍了三种代理:静态代理、Proxy、cglib java 动态代理详解介绍了动态代理具...

  • java动态代理

    三种代理方式 静态代理模式 1.客户端 public class Client { public static...

  • 2020-02-26

    Spring的AOP代理模式 三种实现 1. 通过Proxy的newProxyInstance(类加载器,代理对象...

网友评论

      本文标题:三种代理模式

      本文链接:https://www.haomeiwen.com/subject/nmmeuqtx.html