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

java静态代理和动态代理

3天前CN2资讯


先看静态代理的代码:

package com.reflect; public interface HelloWorld { public void sayHi(); }



package com.reflect; public class HelloWorldImpl implements HelloWorld { @Override public void sayHi() { System.out.println("Hi"); } }



package com.reflect; public class HelloWorldStaticProxy implements HelloWorld { private HelloWorld helloWorld; public HelloWorldStaticProxy(HelloWorld helloWorld) { this.helloWorld = helloWorld; } @Override public void sayHi() { helloWorld.sayHi(); } }



package com.reflect; public interface Welcome { public void welcome(); }



package com.reflect; public class WelcomeImpl implements Welcome { @Override public void welcome() { System.out.println("welcome"); } }



package com.reflect; public class WelcomeStaticProxy implements Welcome { private Welcome welcome; public WelcomeStaticProxy(Welcome welcome) { this.welcome = welcome; } @Override public void welcome() { welcome.welcome(); } }



测试代码

package com.reflect; import junit.framework.TestCase; public class TestProxy extends TestCase { public void testStaticProxy() { HelloWorld helloWorld = new HelloWorldStaticProxy(new HelloWorldImpl()); helloWorld.sayHi(); Welcome welcomeProxy = new WelcomeStaticProxy(new WelcomeImpl()); welcomeProxy.welcome(); } public void testDynamicProxy() { HelloWorldInvocationHandler handler = new HelloWorldInvocationHandler(); HelloWorld helloWorld = (HelloWorld) handler.bind(new HelloWorldImpl()); helloWorld.sayHi(); Welcome welcome = (Welcome) handler.bind(new WelcomeImpl()); welcome.welcome(); } }



测试一下静态代理

运行testStaticProxy,输出:

Hi welcome



看看代码,发现一个静态代理类对应一个接口,有多少个接口,就需要多少个静态代理类。


现在看动态代理的代码:

package com.reflect; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class HelloWorldInvocationHandler implements InvocationHandler { private Object target; public Object bind(Object target) { this.target = target; return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { return method.invoke(target, args); } }



运行testDynamicProxy:

输出

Hi welcome



看到代码,一个动态代理类,可以对应多个接口,因为参数是Object。这样,多个接口,只要一个代理类就行了。

    你可能想看:

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

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

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

    分享给朋友:

    “java静态代理和动态代理” 的相关文章

    bwghost全面指南:如何选择、购买和优化搬瓦工VPS服务

    bwghost的基本介绍 bwghost是一个与搬瓦工(BandwagonHost)紧密相关的术语。搬瓦工是一家来自加拿大的VPS服务提供商,专注于提供基于KVM架构的虚拟专用服务器(VPS)。他们的服务覆盖多个地区,包括香港CN2 GIA和洛杉矶DC6 CN2 GIA-E等。搬瓦工的官网是bwg....

    DMIT Eyeball套餐:高性价比VPS解决方案实现稳定网络连接

    在探讨DMIT Eyeball套餐之前,先来了解一下它的起源。这款套餐曾被称为HKG Lite,后来进行了更名,成为了如今的Eyeball。这个变化并不仅仅是名称的调整,更是DMIT公司在提供服务方面进行的一次重要转型。DMIT Eyeball套餐主要聚焦于为中国大陆用户提供高质量的直连线路。公司在...

    Hostwinds LLC:卓越的网络托管服务与高性价比优势

    Hostwinds LLC成立于2010年,位于美国西雅图。这家公司一直专注于提供多种网络托管服务,包括虚拟主机、虚拟专用服务器(VPS)和独立服务器。在这个竞争激烈的市场中,Hostwinds凭借其独特的优势和不断升级的服务赢得了客户的信赖。我个人认为,Hostwinds的历史反映了它对客户需求的...

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

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

    搬瓦工VPS:初学者的最佳选择与使用指南

    大家对VPS可能不太熟悉,搬瓦工VPS在整个市场中已经站稳了脚跟。作为加拿大IT7公司旗下的一款主机服务,搬瓦工以其性价比高的OpenVZ VPS起步,而现在主要以KVM架构为主流,逐渐发展成为国内用户的热门选择。这种转型让我觉得很有意思,因为它不仅仅是一种产品的升级,更是一种服务的提升。 搬瓦工提...

    跑步的全面指南:基础知识、路线选择与心理技巧

    跑步的基础知识 跑步,这项简单又有效的运动,拥有着悠久的历史和丰富的文化背景。追溯到古代,跑步不仅是人类生存的必要技能,更是一项重要的竞技活动。历史上,古希腊的奥林匹克运动会中,长跑是最受欢迎的项目之一。而在中国,长跑也早在古代就已经成为士兵训练和民间竞技的一部分。随着时代发展,跑步逐渐演变为一种大...