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

Proxy 实现动态代理js proxy代理

3天前CN2资讯

文件结构:

  • Child.class [Interface]
  • ChildImpl.class
  • MyProxy.class [Test Class]

一、Child.class

package proxys; public interface Child { void eat(); }

二、ChildImpl.class

package proxys; public class ChildImpl implements Child { @Override public void eat() { System.out.println("Child eating..."); } }

三、MyProxy.class

package proxys; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * 基于接口的动态代理: Proxy, InvocationHandler */ public class MyProxy { /** * Test Method * @param args 参数列表 */ public static void main(String[] args) { // 未使用代理模式 ChildImpl child = new ChildImpl(); child.eat(); // 使用动态代理增强日志功能 System.out.println(); Child proxyObj = getProxyObj(child, Child.class); proxyObj.eat(); } /** * 获取代理对象 * @param obj 被代理的对象 * @param interfaceType 被代理方法所属的接口类型 * @return 代理对象 */ public static <I> I getProxyObj(Object obj, Class<I> interfaceType) { // 接口类型检查, 因为 Proxy 是基于接口的动态代理 Class<?>[] type = null; Class<?>[] interfaces = obj.getClass().getInterfaces(); for (Class<?> anInterface : interfaces) { if (anInterface.equals(interfaceType)) { type = new Class[]{anInterface}; break; } } if (null == type) { throw new ClassCastException("无法将对象 " + obj + " 代理为 " + interfaceType.getName()); } Object o = Proxy.newProxyInstance(obj.getClass().getClassLoader(), type, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 增强调用前的功能 System.out.println("[" + method.getName() + "] Proxy begin..."); // 调用被代理对象的方法 Object ret = method.invoke(obj, args); // 增强调用后的功能 System.out.println("[" + method.getName() + "] Proxy end..."); return ret; } }); return (I) o; } }

运行结果:

Child eating... [eat] Proxy begin... Child eating... [eat] Proxy end...
    你可能想看:

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

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

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

    分享给朋友:

    “Proxy 实现动态代理js proxy代理” 的相关文章

    VPS是什么?全面解析虚拟专用服务器的定义、用途与选择指南

    VPS的定义 VPS,全称Virtual Private Server,中文翻译为虚拟专用服务器。它是一种通过虚拟化技术将一台物理服务器分割成多个独立虚拟服务器的服务。每个VPS都拥有自己的操作系统、存储空间、内存和带宽,用户可以像使用独立服务器一样进行管理和配置。VPS的出现,为用户提供了一种介于...

    解决 ChatGPT Access Denied 问题的全面指南

    在使用ChatGPT时,遇到“Access Denied”问题并不罕见。这个问题的出现往往让人感到沮丧,因为我们希望随时随地都能使用这个强大的工具。不过,了解一些常见原因可以帮助我们更快找到解决方案。 地区限制可能是导致“Access Denied”问题的一个主要因素。我常常听说在一些特定的地区,用...

    如何通过 NameCheap 注册 $0.99 便宜域名并选择合适后缀

    在如今的网络世界,获取一个合适的域名可以说是非常关键的。对我来说,域名不仅是一个网站的门牌,更是品牌的第一印象。最近,NameCheap 推出了一个令人兴奋的优惠活动,注册域名低至 $0.99 每年,这绝对是个让人心动的机会。想到能够以这样的低价拥有一个域名,真的是让我忍不住想赶紧注册。 相信大家对...

    甲骨文云注册:详细流程与免费试用攻略

    甲骨文云注册概述 甲骨文云介绍和服务特点 我对甲骨文云的首要印象是它独一无二的服务。甲骨文云不仅提供高性能的VPS服务器,还给予用户一个轻松的起步体验。其主要服务包括两台配置为1核1G内存、50G硬盘和10T流量的AMD VPS,还有一台配置为4核24G内存、100G硬盘、10T流量的ARM VPS...

    轻云互联:助力企业数字化转型的云计算解决方案

    轻云互联是隶属于广州轻云网络科技有限公司的云计算服务提供商。自成立以来,轻云互联专注于云计算领域,提供一系列全方位的一体化解决方案。这些解决方案涵盖了云计算产品、租用托管服务、云服务器、裸金属服务器、云虚拟主机以及游戏云服务等。走进轻云互联,你会发现这里不仅是一个技术创新的平台,更是一个通过边缘计算...

    hncloud:助力企业数字化转型的云计算服务提供商

    在数字化浪潮席卷全球的今天,hncloud(华纳云)应运而生,成为一家备受瞩目的全球数据中心基础服务提供商。隶属于香港联合通讯国际有限公司的hncloud,凭借其在行业中的深厚积淀和技术实力,逐渐发展成为一颗闪耀于云计算领域的明星。作为APNIC和ARIN的会员单位,hncloud自有ASN号,为用...