ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

了解Java中的代理和动态代理

2022-11-08 16:33:15  阅读:361  来源: 互联网

标签:代理 java 编写 创建


代理

代理是一种设计模式。当我们想要添加或更改现有类的某些功能时,我们会创建和使用代理对象。使用代理对象而不是原始对象。通常,代理对象具有与原始对象相同的方法。在Java中,代理类通常扩展原始类。代理具有原始对象的句柄,可以对其调用该方法。

代理,在其最一般的形式中,是一个充当其他事物接口的类。通俗地说,java 中的代理类是“代替”或“代表”另一个类委派责任的类。代理模仿的对象称为实现对象。

java 中的代理类型

Java 中主要有 2 种类型的代理

  1. 静态代理
  2. 动态代理

静态代理

手动编写的代理称为静态代理。以下示例适用于 statc 代理

首先,我们可以创建一个要在代理和真实类之间共享的接口。

public interface User {
    String getType();
}

现在我们有一个接口,我们可以实现特定用户的实现。

public class FreeUser implements User {
    public String getType() {
        return "free";
    }
}

现在我们可以创建一个接口,该接口将扩展用户界面以获取其行为,这些行为可以通过其实现进行代理。Proxy

public interface ProxyUser extends User {
}

所以可以通过实施来实现FreeUserProxyProxyUser

public class FreeUserProxy implements ProxyUser {
    private FreeUser freeUser = new FreeUser();
    private static final Logger log = LoggerFactory.getLogger(FreeUserProxy.class);

    public String getType() {
        log.info("getType() called");
        return freeUser.getType();
    }
}

现在从主类运行代码

public class Day59 {
    public static void main(String [] args) {
        User user = new FreeUserProxy();
        System.out.println(user.getType());
    }
}

用法

当我们需要创建一个包装器来覆盖客户端的主对象的复杂性时,使用代理模式。此外,我们可以在代理对象上添加其他行为,以增强代理对象。

优势

  1. 代理可以隐藏复杂的任务,例如进行网络通信,事务管理,而无需更改实现。

  2. 代理可用于在实现对象之上插入自定义行为/代码,而无需更改实现对象。有时无法访问外部库的代码进行编辑,自定义行为可以在执行该库提供的方法之前/之后插入。例如,您可以为 java.net.HttpUrlConnection 类编写一个代理来记录所有外部服务调用请求,而无需更改 HttpUrlConnection 的实现。

  3. 代理模式的另一个优点是安全性。远程代理可用于在客户端中提供代理存根,并在服务器上调用实现。

标签:代理,java,编写,创建
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有