Java中的代理(二)--JDK动态代理

2023-11-03

JDK动态代理借助接口实现,目标类需是接口形式,代理类继承InvocationHandler类,通过反射方式动态创建目标类。

1.目标对象


public interface ByShoot {
	void byShoot(String size);
}

public class ShootFactory implements ByShoot{

	@Override
	public void byShoot(String size) {
		System.out.println("已经为您生产出了尺码为"+size+"的鞋子");
	}

}

2.代理类 关键字继承InvocationHandler类

public class LisiFactory implements InvocationHandler {

	// 被代理的对象
	private Object factory ;

	public Object getFactory() {
		return factory;
	}

	public void setFactory(Object factory) {
		this.factory = factory;
	}

	//ssm: Spring SpringMVC mybitys
	//Spring:AOP IOC +....
	//AOP:代理    (面向切面的编程)
	// 通过代理对象对方法进行增强
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		FrontService();
		Object retObject = method.invoke(factory, args);  //这里用了反射的思想,因为我们不知道调用的是那个工厂的那个方法
		endService();
		return null;
	}

	// 前置服务
	public void FrontService() {
		System.out.println("根据您的需求进行市场调研");
	}

	// 后置服务
	public void endService() {
		System.out.println("为您提供一条龙的包办服务");
	}
	
	//调度员工
	/**
	* 1 新建一名员工
	 * 2.告诉员工工厂地址
	 * this:绑定
	 * @return
	 */
	public Object getProxyInstance() {
		// TODO Auto-generated method stub
		return Proxy.newProxyInstance(factory.getClass().getClassLoader(), factory.getClass().getInterfaces(), this);
	}
	
	
}

3.测试类,买家

public class Test {
	public static void main(String[] args) {
		ClothesFactory clothesFactory = new ClothesFactory();
		ShootFactory shootFactory = new ShootFactory();
		LisiFactory lisiFactory = new LisiFactory();
		lisiFactory.setFactory(shootFactory);
		ByShoot yuangong1 = (ByShoot) lisiFactory.getProxyInstance();
		yuangong1.byShoot("42");
		lisiFactory.setFactory(clothesFactory);
		ByClothes yuangong  = (ByClothes) lisiFactory.getProxyInstance();
		yuangong.clothes("XXL");
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中的代理(二)--JDK动态代理 的相关文章

随机推荐

  • java 反转链表、合并链表

    第一个问题 反转链表 1 题目描述 输入一个链表 反转链表后 输出新链表的表头 2 解题思路 定义三个指针 第一个指针指向当前正在处理的节点 第二个指针指向当前处理节点的下一个节点 该指针是为了保证正常的遍历完顺序链表的所有节点 第三个指针
  • SQLServer创建用户登录

    创建用户登录注意事项 密码是区分大小写的 只有创建SQL Server登录时 才支持对密码预先进行哈希运算 如果指定MUST CHANGE 则CHECK EXPIRATION和 CHECK POLICY必须设置为 ON 否则 该语句将失败
  • 硬件问题总结

    STM32最小系统 F103 1 STM32最小系统 1 1 供电 3 3V 通常使用ASM1117进行5V转3 3V 注意 给单片机供电时要加0 1uf滤波电容 电容要尽可能靠近单片机 1 2外部晶振电路 一般使用外部8M晶振来作为STM
  • C++访问类中私有成员变量的方法

    原则上 C 类中私有变量不允许在类之外的其他任何地方访问 一般来说功能完善的类都会提供get set方法来操作类属性值 还有就是就是通过友元访问 但是 但如果没有get set方法都没有提供 也没有定义友元 比如使用的是第三方提供的 o 或
  • 华为OD机试(B卷)

    华为OD机试 B卷 有幸接到了华为OD的机试邀请 三道算法题 比较幸运的是 最后一题 也相对来说不算太难 没有抽到动态规划 还是花了大约90分钟 三道题都通过了 最终拿到了满分 第一题第二题都相对来说比较基础 由于平时也没有刷题的习惯 用自
  • Using MySQL Enterprise Backup Tools

    本文主要介绍MySQL Enterprise Backup的安装以及使用 1 安装 从官方网站下载MySQL Enterprise Backup安装包 推荐下载rpm软件包 root mydb01 rpm qpl meb 4 1 1 el7
  • Uncaught (in promise) DOMException: Failed to execute 'open' on 'XMLHttpRequest': Invalid URL

    解决方案 url前面一定要加http
  • Python版的BS期权定价模型和希腊值分析

    我比较懒 主要是打理自己的github的更新 是关于量化投资 机器学习策略相关的项目 https github com Neural Finance 这次更新一个我在学习期权定价过程中 Black Scholes Model 和相关的希腊值
  • webpack 中压缩代码

    阅读 深入浅出的webpack 压缩代码 一 为什么要压缩代码 浏览器通过服务器访问网页时获取的JavaScript CSS资源都是文本形式的 文件越大 网页加载的时间越长 对这些资源进行压缩 1 可以提升网页加载速度和减少网络传输流量 2
  • Java基础知识查阅表(四)[线程、网络编程、注解、java8新特性]

    文章目录 Java中的线程 线程的分类 线程调度规则 获取线程的优先级 其他几个方法 线程的通信 守护线程 线程的生命周期 线程安全问题 线程安全的类 ReentrantLock加锁 关于锁的面试题 定时器Timer Java网络编程 两个
  • 数据结构—顺序表基本操作(c语言代码)

    顺序表 计算机内部存储一张线性表是用一组连续地址内存单元 这种存储结构即为顺序存储结构 这种结构下的线性表叫顺序表 顺序表有两种定义方法 1 静态定义 2 动态生成 顺序表是最简单的一种线性存储结构 优点 构造简单 操作方便 通过顺序表的首
  • python装饰器原理

    装饰器作用 装饰器在实际开发中应用广发 如 1 引入日志 2 函数执行时间统计 3 执行函数前预备处理 4 执行函数后清理功能 5 权限校验等场景 6 缓存 装饰器可以实现在不修改之前已经写好并且封装好的代码的前提下对之前的代码进行功能上的
  • LASlib/LAStools:Win10 + VS2017 编译LASlib/LAStools

    一 下载解压 下载地址 http lastools github io download LAStools zip 解压地址 G LAStools 二 编译 2 1 打开 用VS2017打开lastools dsw 历史原因 一直点确定就可
  • Linux shell 从文件中随机选择内容

    如果需要从文件中随机选择一定行的内容 可以借助sort 命令 如下 使用sort 命令将文件随机排序 选择前100行 sort random sort file head n 100
  • 《自然语言处理》第二次作业:语言模型和文本分类

    文章目录 作业要求 代码 读取数据集 建立二元语法模型 朴素贝叶斯分类 分类和评估 计算困惑度 完整代码 运行结果 作业要求 题目 语言模型和文本分类 数据集 text classification data用户评论 包括训练集 开发测试集
  • 三位数除以两位数怎么算竖式_四年级数学上册三位数除以两位数竖式笔算专项练习(10套)...

    四年级数学上册三位数除以两位数竖式笔算专项练习 一 三位数除以两位数的除法 包括以下两部分 一 三位数除以整十数 如 二 三位数除以两位数 二 除数是两位数的除法法则 从被除数左边的高位起 先用除数试除被除数的前两位数 如果它比除数小 再试
  • 深入浅出讲解 NAT 和 UDP/TCP 点对点通讯

    深入浅出讲解 NAT 和 UDP TCP 点对点通讯 转自 http blog csdn net g brightboy article details 12704933 一 什么是NAT 为什么要使用NAT NAT是将私有地址转换为合法I
  • Java面向对象(基础总结)

    Java面向对象 基础总结 面向对象是一种编程思想 面向对象的三大基本特征 封装 继承 多态 面向对象的编程思想就是把事物看作一个整体 从事物的特征 属性 和行为 方法 两个方面进行描述 面向对象的过程就是找对象 建立对象 使用对象 维护对
  • angular中涉及rxjs请求beego接口跨域问题解决

    今天遇到一个调用服务端接口跨域问题 我用本地的angular运行项目 访问本地的beego接口 发现请求接口状态404 并且接口方法还是OPTIONS 一查知道是跨域了 在网上搜索一些跨域访问的方法 发现跨域时访问可以了 但正常post接口
  • Java中的代理(二)--JDK动态代理

    JDK动态代理借助接口实现 目标类需是接口形式 代理类继承InvocationHandler类 通过反射方式动态创建目标类 1 目标对象 public interface ByShoot void byShoot String size p