当前位置:首页 > CN2资讯 > 正文内容

Java代理模式-静态代理和动态代理静态代理和动态代理

2天前CN2资讯
静态代理

以租房为示例,不废话上代码

创建租房接口

public interface Rent { public void rent(); }

 

创建房东类

//房东 public class Host implements Rent{ public void rent() { System.out.println("房东要出租房子"); } }

  

创建代理对象

public class Proxy implements Rent{ private Host host; public Proxy() { } public Proxy(Host host) { this.host = host; } public void rent() { seeHouse(); host.rent(); hetong(); fare(); } // 看房 public void seeHouse(){ System.out.println("中介带你看房"); } // 收中介费 public void fare(){ System.out.println("收中介费"); } // 签租赁合同 public void hetong(){ System.out.println("签租赁合同"); } }

  

代码测试

public class Client { public static void main(String[] args) { // 房东要租房子 Host host=new Host(); // 代理,中介帮房东租房子,但是呢?代理角色一般会有一些附属操作! Proxy proxy = new Proxy(host); // 你不用面对房东,直接找中介租房即可! proxy.rent(); } }

执行结果

中介带你看房 房东要出租房子 签租赁合同 收中介费

 

动态代理

动态代理分为两大类:基于接口的动态代理,基于类的动态代理

需要了解两个类:proxy代理、InvocationHandler调用处理程序

基于接口---JDK原生动态代理

创建租房接口

public interface Rent { public void rent(); }

  

创建房东类

public class Host implements Rent { public void rent() { System.out.println("房东要出租房子"); } }

  

创建测试类

public class Client { public static void main(String[] args) { final Rent host = new Host(); Rent proxy =(Rent) Proxy.newProxyInstance(host.getClass().getClassLoader(), host.getClass().getInterfaces(), new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws InvocationTargetException, IllegalAccessException { System.out.println("中介带你看房"); Object invoke = method.invoke(host, args); System.out.println("签租赁合同"); return invoke; } }); proxy.rent(); } }

执行结果

中介带你看房 房东要出租房子 签租赁合同

说明一下Proxy对象的newProxyInstance方法

public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
  • ClassLoader loader,:指定当前目标对象使用类加载器,获取加载器的方法是固定的
  • Class<?>[] interfaces,:目标对象实现的接口的类型,使用泛型方式确认类型
  • InvocationHandler h:事件处理,执行目标对象的方法时,会触发事件处理器的方法,会把当前执行目标对象的方法作为参数传入

还有其中 InvocationHandler 接口的 invok 方法

public Object invoke(Object proxy, Method method, Object[] args)
  • Cproxy,:就是代理对象,newProxyInstance方法的返回对象

  • method,:调用的方法

  • args:方法中的参数

  

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/23898.html

    分享给朋友:

    “Java代理模式-静态代理和动态代理静态代理和动态代理” 的相关文章

    甲骨文云免费套餐与ARM CPU优势解析

    甲骨文云(Oracle Cloud)是一个强大的云服务平台,近年来受到了越来越多用户的关注。我自己也曾经探索过这个平台,在这里我想和大家聊聊甲骨文云的免费套餐,这对中小企业以及开发者来说真的是一个不错的选择。免费的套餐不仅简化了入门程序,也为新用户提供了足够的资源来尝试不同的云服务。 甲骨文云的免费...

    AkkoCloud评测:为中国用户打造的高性价比VPS与独立服务器解决方案

    AkkoCloud成立于2019年,作为一家具备国人运营背景的主机商,逐渐在海内外VPS和独立服务器市场中占据了一席之地。我的亲身体验让我感受到,AkkoCloud的设计初衷就是为中国大陆的用户提供一个稳健可靠的服务器解决方案。对于很多用户来说,它的出现无疑填补了国内市场的一部分空白。 回想起我探索...

    BuyVM色情网站托管服务解析 - 提升成人内容运营安全与效率

    什么是BuyVM色情服务 当我提到BuyVM的时候,可能很多人对这个名字还不太熟悉。简单来说,BuyVM是一家提供虚拟专用服务器(VPS)和网站托管服务的公司,专注于各种类型的内容,包括成人色情内容。它的历史可以追溯到多个年份前,BuyVM在业内逐渐赢得了声誉,成为不少成人网站的首选托管平台。以其可...

    AS4837和AS9929线路在国际通信中的优势与应用分析

    在了解AS4837线路的历史背景时,回顾其起源与发展非常重要。AS4837线路,通常被称为中国联通的骨干网线路,最早始建于20世纪90年代。那时,随着互联网的兴起,全球对网络基础设施的需求不断增加,中国决定建立更强大的国际连接,通过AS4837将中国大陆与香港、美国、日本、韩国等多地紧密相连。这个决...

    RackNerd黑五促销活动详解:超值套餐与刺激抽奖

    RackNerd黑五促销活动概述 RackNerd,成立于2017年,以其出色的虚拟主机、VPS主机和独立服务器服务,在国外主机商领域占有一席之地。随着公司不断壮大,RackNerd在全球20个国家设立了数据中心,涵盖美加、欧洲和亚洲,提供多样化的服务方案。我一直很欣赏他们采用的当下流行的KVM虚拟...

    SSH工具:安全远程连接与数据传输的最佳选择

    SSH 工具概述 在网络安全日益受到重视的今天,SSH(Secure Shell Protocol)工具逐渐成为了我们进行安全远程连接的首选。简单来说,SSH 是一种加密的网络传输协议,它能在不安全的网络环境中提供安全的数据传输。这使得无论是在公司办公还是在家中,SSH 工具都极其重要,特别是对于那...