当前位置: 首页 > news >正文

系列七、动态代理

一、概述

二、Jdk动态代理案例

2.1、Star

/*** @Author : 一叶浮萍归大海* @Date: 2023/10/27 17:16* @Description:*/
public interface Star {/*** 唱歌* @param name 歌曲名字* @return*/String sing(String name);/*** 跳舞*/void dance();
}

 2.2、BigStar

/*** @Author : 一叶浮萍归大海* @Date: 2023/10/27 17:12* @Description: 大明星类(目标对象)*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BigStar implements Star {/*** 明星的名字*/private String name;/*** 唱歌* @param name 歌曲名字* @return*/@Overridepublic String sing(String name) {System.out.println(this.name + "正在唱:" + name);return "谢谢!谢谢!";}/*** 跳舞*/@Overridepublic void dance() {System.out.println(this.name + "正在优美的跳舞");}}

2.3、BigStarProxy

/*** @Author : 一叶浮萍归大海* @Date: 2023/10/27 17:18* @Description: 经纪人*/
public class BigStarProxy {public static Star createProxy(BigStar bigStar) {/*** 参数1:类加载器* 参数2:指定生成的代理长什么样,也就是有哪些方法* 参数3:用来指定生成的代理对象要干什么事情*/ClassLoader classLoader = BigStarProxy.class.getClassLoader();Class<?>[] interfaces = bigStar.getClass().getInterfaces();Star starProxy = (Star) Proxy.newProxyInstance(classLoader, interfaces, new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 代理对象要做的事情,会在这里写代码if ("sing".equals(method.getName())) {System.out.println("准备话筒,收钱20万");} else if ("dance".equals(method.getName())) {System.out.println("准备场地,收钱1000万");}return method.invoke(bigStar,args);}});return starProxy;}}

2.4、测试

/*** @Author : 一叶浮萍归大海* @Date: 2023/10/27 17:33* @Description:*/
public class SpringProxyJdkMain {public static void main(String[] args) throws Exception {m1();}private static void m1() {BigStar bigStar = new BigStar("杨超越");Star proxy = BigStarProxy.createProxy(bigStar);String singResult = proxy.sing("好日子");System.out.println(singResult);System.out.println("=================");proxy.dance();}}

http://www.lryc.cn/news/209050.html

相关文章:

  • Kafka集群搭建与SpringBoot项目集成
  • 一个简单的注册的页面,如有错误请指正;(3.JavaScript)
  • selenium (自动化概念 测试环境配置)
  • Mybatis-Plus(企业实际开发应用)
  • Spring Web MVC入门
  • 【C++】mapset的底层结构 -- AVL树(高度平衡二叉搜索树)
  • 吴恩达《机器学习》1-4:无监督学习
  • 一个简单的注册页面,如有错误请指正(2.css)
  • 【Unity精华一记】特殊文件夹
  • Node.js中的单线程服务器
  • 如何删除数组中的某个元素?
  • Apache ActiveMQ RCE漏洞复现(CNVD-2023-69477)
  • 【BUG】Nginx转发失败解决方案
  • 综合OA管理系统源码 OA系统源码
  • 9-MySQL提高数据管理效率(分库分表实践)
  • 经典卷积神经网络 - NIN
  • leetcode_2558 从数量最多的堆取走礼物
  • 01. 嵌入式与人工智能是如何结合的?
  • vue3.0运行npm run dev 报错Cannot find module node:url
  • 26. 删除排序数组中的重复项、Leetcode的Python实现
  • 荣耀推送服务消息分类标准
  • [数据结构]-二叉搜索树
  • 力扣每日一题79:单词搜索
  • ChatGPT如何应对用户提出的道德伦理困境?
  • SpringBoot运行流程源码分析------阶段三(Spring Boot外化配置源码解析)
  • 环形链表-力扣
  • 人生岁月年华
  • 电脑QQ如何录制视频文件?
  • python:多波段遥感影像分离成单波段影像
  • 天堂2游戏出错如何解决