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

动态代理动态代理和静态代理

2天前CN2资讯

dunamic proxy


动态代理模式相比静态代理,不需要自己写代理类

jdk可以实现动态代理

操作如下:


公共接口:

/**
* ClassName: House<br/>
* Description: 房子<br/>
* date: 2018/12/26 11:08 AM<br/>
*
* @author chengluchao
* @since JDK 1.8
*/

public interface House {
/**
* 地址
*/
void address();

/**
* 房租
*/
void rent();

/***
* 租期
*/
void leaseTerm();
/**
* 房东
*/
void landlord();
}

真实角色:

/**
* ClassName: RealHouse<br/>
* Description: 房东<br/>
* date: 2018/12/26 11:14 AM<br/>
*
* @author chengluchao
* @since JDK 1.8
*/

public class RealHouse implements House {
@Override
public void address() {
System.out.println("北京市-东城区-长安街-1号院-1号楼-1单元-101");
}

@Override
public void rent() {
System.out.println("3000/月");
}

@Override
public void leaseTerm() {
System.out.println("2年");
}

@Override
public void landlord() {
System.out.println("王大户");
}
}

实现接口:

/**
* ClassName: HouseHandler<br/>
* Description: <br/>
* date: 2018/12/27 10:25 AM<br/>
*
* @author chengluchao
* @since JDK 1.8
*/

public class HouseHandler<T> implements InvocationHandler {

private T t;

public HouseHandler(T t) {
this.t = t;
}

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("真实操作前的操作");
if (method.getName().equals("rent"))
System.out.println("9000");
else
method.invoke(t, args);
return null;
}
}


测试类:

/**
* ClassName: HouseTest<br/>
* Description:测试类 <br/>
* date: 2018/12/26 11:21 AM<br/>
*
* @author chengluchao
* @since JDK 1.8
*/

public class HouseTest {
public static void main(String[] args) {
House real = new RealHouse();
HouseHandler handler = new HouseHandler(real);
House proxy = (House) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{House.class}, handler);

proxy.address();
proxy.landlord();
proxy.leaseTerm();
proxy.rent();

}

}

真实操作前的操作

北京市-东城区-长安街-1号院-1号楼-1单元-101

真实操作前的操作

王大户

真实操作前的操作

2年

真实操作前的操作

9000



也可以使用lambad表达式,不需要写接口的实现类,直接在测试方法中调用:

static void lamdTest() {

House proxy = (House) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{House.class}, (object, method, args) -> {
System.out.println("lamdTest-真实操作前的操作");
if (method.getName().equals("rent"))
System.out.println("9000");
else
method.invoke(new RealHouse(), args);
return null;
});

proxy.address();
proxy.landlord();
proxy.leaseTerm();
proxy.rent();

}



lamdTest-真实操作前的操作

北京市-东城区-长安街-1号院-1号楼-1单元-101

lamdTest-真实操作前的操作

王大户

lamdTest-真实操作前的操作

2年

lamdTest-真实操作前的操作

9000
























    你可能想看:

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

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

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

    标签: 动态代理
    分享给朋友:

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

    CN2线路与普通线路:打造流畅无阻的网络体验

    在当今这个高度互联的时代,网络已经成为我们生活中不可或缺的一部分。无论是工作、学习还是娱乐,一个稳定、快速的网络连接都至关重要。而在众多网络解决方案中,CN2线路因其卓越的性能和稳定性,逐渐成为许多用户的首选。CN2线路到底是什么?它与普通线路有何不同?本文将为您一一解析。###什么是CN2线路?C...

    探索韩国VPS服务:选择高性能低延迟的虚拟专用服务器

    在数字化迅猛发展的今天,韩国的VPS(虚拟专用服务器)越来越受到用户的青睐。许多企业和个人用户都开始关注这个区域,特别是那些需要稳定网站和应用程序的人。这篇文章将为你深入探讨韩国VPS的市场需求和背景,以及它在不同场景中的适用性。 首先,韩国VPS市场的兴起与其优越的网络基础设施密不可分。韩国位于东...

    台湾VPS:选择高效、安全、性价比优越的虚拟专用服务器

    在当今互联网时代,VPS(虚拟专用服务器)成为了很多用户在选择网络服务时的热门选择。在我看来,VPS的定义可以说是一个虚拟化的服务器,用户能够以相对较低的成本获得类似于物理服务器的管理权和资源使用权。VPS通常被用于搭建网站、管理应用程序、进行数据存储等多种场景,尤其是对资源有较高要求的用户而言,它...

    OVH 黑五促销活动详解:服务器折扣与购买指南

    OVH 黑五活动概述 在每年感恩节后的第一天,黑色星期五(Black Friday)成了一年中最大的购物盛事之一。它起源于美国,最初是零售商为了清理库存而设立的特价销售日。随着时间的推移,黑五的影响力逐渐扩展至全球,成为各种行业都参与的一次购物狂欢。对于消费者而言,这不仅是一次购物机会,更是寻找到心...

    AWS新加坡评测:用户体验与性价比全面分析

    在探索AWS在新加坡的使用体验时,服务的可用性是我最先关注的方面。AWS 在全球范围内的广泛服务网络给予用户许多选择。在新加坡,AWS 提供了多种计算、存储和数据库等服务,让我感觉使用起来非常方便。尤其是在需要快速部署解决方案或应对业务高峰时,AWS 新加坡的数据中心承载能力和稳定性非常令人满意。无...

    不限流量套餐的优势与影响——如何享受无忧上网体验

    在这个快速发展的时代,“不限制”这个概念越来越受到人们的关注。它并不仅仅是一个简单的词语,更是一种体现自由和可能性的思维方式。对我而言,不限制意味着打破边界,它让我们能够探索更广阔的世界。无论是技术领域、教育领域还是我们日常的社会生活中,这个概念都在发挥着重要的作用。 从概念上来看,不限制可以被理解...