Java 代理模式

这篇具有很好参考价值的文章主要介绍了Java 代理模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

代理模式

目标类和代理类,不是直接调用目标类对象,而是通过调用代理类的对象的方法,代理类来帮我们访问目标类对象,这样我们就可以在代理类上添加更多需要的扩展功能,而目标类不用改动,只用实现自身的主要功能。
代理类是为了扩展目标类的功能,代理类和目标类的产出结果应该相同,所以为了确保代理类和目标类的返回类型一致,最好使用接口来约束代理类和目标类。
使用接口而不是继承,也减少了目标类和代理类间的耦合,并且在动态代理中,动态生成的代理类会自动去继承 Proxy 类,而Java是单继承所以不行,而且需要使用反射来获取目标类的接口来创建代理类实例, 如果被代理对象没有实现接口,则无法通过接口来定义代理对象需要实现的方法

动态代理

在Java中可以通过Proxy.newProxyInstance()方法创建动态代理类的实例。
而与静态代理不同的是,静态是在程序运行前就已经存在代理类的字节码文件,也就是说,事先就写好了代理类的源码并编译,动态代理类的源码是在程序运行期间由JVM根据反射等机制动态的生成。并且目标对象是固定的,代理类一般会持有一个目标类的对象引用(即作为成员变量。
在运行期间动态创建实例
动态代理,通俗点说就是:无需声明式的创建java代理类,而是在运行过程中生成"虚拟"的代理类,被ClassLoader加载。从而避免了静态代理那样需要声明大量的代理类。

public static Object newProxyInstance(ClassLoader loader,
                                          Class<?>[] interfaces,
                                          InvocationHandler h)
        throws IllegalArgumentException
    {...}

ClassLoader loader:用于指定一个类加载器,用来加载代理类,通常使用当前类的类加载器
Class<?>[] interfaces:目标类的接口列表,指定生成的代理长什么样子,也就是有哪些方法
InvocationHandler h:InvocationHandler是一个接口,所以可以使用匿名内部类并重写对应方法invoke(),用来指定生成的代理对象要干什么事情,在调用代理类的方法时会自动调用该方法。
java动态代理中的invoke方法是如何被自动调用的文章来源地址https://www.toymoban.com/news/detail-687998.html

到了这里,关于Java 代理模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Java的设计模式 - 代理模式

    代理模式是一种使用代理对象来执行目标对象的方法并在代理对象中增强目标对象方法的一种设计模式。简单来讲就是在不修改目标对象的基础上,增强主业务逻辑的设计模式。 代理模式基本可分为三种 静态代理 JDK动态代理 CGLIB动态代理 上述简单分就是静态和动态代理,静

    2024年02月07日
    浏览(37)
  • Java 与设计模式(13):代理模式

    代理模式是一种结构型设计模式,用于在访问对象时引入一个代理对象,以控制对实际对象的访问。代理对象充当了客户端和实际对象之间的中介,客户端通过代理对象间接地访问实际对象,从而可以在访问过程中添加额外的逻辑或控制。代理模式可以提供对实际对象的保护

    2024年02月09日
    浏览(38)
  • Java设计模式---单例 工厂 代理模式

    单例模式是设计模式中的一种,属于创建型模式。在软件工程中,单例模式确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于那些需要频繁实例化然后引用,且创建新实例的开销较大的类,例如数据库连接池、缓存管理等。 意图 :保证一个类仅有一个实例

    2024年01月24日
    浏览(52)
  • Java中的代理模式(二)JDK动态代理

    大家好👋,我是极客涛😎,上一篇中我们对代理模式有两大类,静态代理和动态代理,对于静态代理相信大家都信手拈来。对于动态代理还有两种实现,一种是java原生的Jdk代理,一种是Cglib方式。因为涉及到源码解读,所以我也将分两期完成,本期主要讲讲JDK动态代理的实

    2024年01月22日
    浏览(42)
  • Java设计模式 (三) 代理设计模式

    什么是代理设计模式? 代理设计模式是一种结构型设计模式,它允许创建一个代理对象,用于控制对其他对象的访问。代理模式通常用于在访问对象时添加一些附加操作,而不是直接访问真实对象。代理模式可以在不改变原始类代码的情况下,通过引入代理类来增强功能。 代

    2024年02月12日
    浏览(43)
  • Java设计模式中的代理模式

    Java设计模式中的代理模式 代理模式是一种结构型设计模式,它提供了一个代理对象,以控制对其他对象的访问。代理可以充当中介,用于控制对真实对象的访问。 代码举例演示 静态代理: 动态代理 区别: 静态代理: 代理类在编译时就已经确定,并且需要为每个被代理的

    2024年01月25日
    浏览(47)
  • 代理模式(Java实现)

    代理模式是常见的设计模式之一,顾名思义,代理模式就是代理对象具备真实对象的功能,并代替真实对象完成相应操作,并能够在操作执行的前后,对操作进行增强处理。(为真实对象提供代理,然后供其他对象通过代理访问真实对象) 分为 静态代理 动态代理 jdk动态代理

    2024年02月12日
    浏览(37)
  • Java中的代理模式

    接口 目标类 代理类 测试 接口 目标类 动态代理类 测试 总结: 动态生成代理类 通过实现接口生成代理类(目标接口必须实现接口) 代理类是实现接口的方式 调用目标类使用反射调用 目标类调用本类方法只会代理一次 目标类 代理类 测试 总结 通过ASM第三方框架动态代理 无需接

    2024年02月15日
    浏览(38)
  • Java 代理模式

    目标类和代理类,不是直接调用目标类对象,而是通过调用代理类的对象的方法,代理类来帮我们访问目标类对象,这样我们就可以在代理类上添加更多需要的扩展功能,而目标类不用改动,只用实现自身的主要功能。 代理类是为了扩展目标类的功能,代理类和目标类的产出

    2024年02月10日
    浏览(26)
  • Java研学-代理模式

    1 分类   静态代理:在程序运行前就已经存在代理类的字节码文件,代理对象和真实对象的关系在运行前就确定了。(代理类及对象要自行创建)   动态代理:代理类是在程序运行期间由 JVM 通过反射等机制动态的生成的,不存在代理类的字节码文件,动态生成字节码对

    2024年01月25日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包