初步学习java 动态代理

news/2025/2/25 5:25:39

前言

学习 动态代理知识之前,可以先了解 反射

反射的复习-CSDN博客


场景

我们知道,一些大明星开演出会,要收门票,准备场景啥的。但很显然 明星,他们主要还是 唱歌,跳舞,和粉丝互动。那么 其他事应该是 他们的经纪人或者第三方公司承担。

发现

如果没有代理:

大明星-准备场地,收门票--唱歌,跳舞

如果有代理:

代理--在唱歌,跳舞这一环节中准备场地,收门票--通知大明星-- 唱歌,跳舞

通过对比可以发现,使用代理 (充当经纪人,帮手.....) 可以为大明星他们节省更多的时间准备 演唱会,提高演唱会的质量。


程序为什么 要代理,代理长什么样?

通过浏览上面的场景,发现不是所有的事,都需要自己去承担,去做的,可以通过代理转移部分职责

  • 就好比 一个程序,被它的开发者,赋予过多的职能,会显得特别臃肿,或者看着不协调。这时候需要想着是否可以通过代理把不需要的,转嫁给其他人。也就是代理这个程序 ,承担部分不影响主功能的能力。

中介如何知道要派唱歌,跳舞方法的代理?

使用接口 ,接口中有 唱歌,跳舞抽象方法

  • 通过浏览上面的场景,发现如果要代理,需要 唱歌,跳舞方法。那么如何去获取呢?- 定义一个 明星接口,有 唱歌,跳舞抽象方法
  • 根据上图的场景,虽然 明星的经纪人不参与 唱歌,跳舞 ,但仍然掌握明星他们唱歌跳舞的全过程。明星只负责唱歌,跳舞,其他事由他们的经纪人处理。
  • 因此当有人邀请明星唱歌,明星会要求他们的经纪人去处理,处理好了之后,明星再去唱歌,跳舞啥的。因此在代码中,如果 有一个明星类 ,类中有唱歌,跳舞两个方法。同时 还有一个代理类,想要代理 明星类的方法,那么需要写一个接口,有 唱歌,跳舞抽象方法。代理类通过 实现 接口,来重写 唱歌跳舞方法

动态代理的步骤

1 目标类实现 和它 具有相同方法的接口

2 创建代理类,类中创建代理对象方法

3 具体使用反射 reflect 包下的  调用 Proxy.newProxyInstance 方法 ,创建对象

4 在newProxyInstance 方法 中 调用 involve方法 完成 对目标类主干内容的补充,并适当时候调用目标类和接口具有相同的方法

5 测试类 一般写 目标类对象,作为参数 传递给 创建代理对象方法

发现:代理类,真正代理的是 接口,作为接口的实现类 重写和目标类相同的方法,具体操作上 是补充 目标类方法的内容,同时 调用目标类方法。

demo(案例)

目的:本案例,使用代理 是操作,在接口和目标类相同sing,dance方法,通过 代理分担目标类的任务,实现间接操作目标类的效果

BigStar 类,Star 接口


Proxy 代理类

创建代理对象方法 代码

package fs;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class Proxy {
  public static Star createProxy(BigStar star){
    /*
    ClassLoader loader,
  Class<?>[] interfaces,
 InvocationHandler h
 参数1 用于指定一个代理类,代理类必须实现接口,所以
 参数2指定代理类必须实现的接口
 参数3 指定代理类必须实现的接口
     */
    Star starProxy= (Star) java.lang.reflect.Proxy.newProxyInstance(Proxy.class.getClassLoader(), new Class[]{Star.class}, new InvocationHandler() {
      @Override
      public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
       // 代理对象要做的事情
         if (method.getName().equals("sing")){
           System.out.println("准备话筒,收钱20万");
         }
         else if (method.getName().equals("dance")){
           System.out.println("准备场地,收钱200万");
         }
          return method.invoke(star,args);
      }
    });
            return starProxy;
  }
}

newProxyInstance方法的参数

 参数1 用于指定一个代理类,代理类必须实现接口,所以
 参数2指定代理类必须实现的接口
 参数3 指定代理类必须实现的接口


Test 测试类

package fs;

public class Test {
    public static void main(String[] args) {
        BigStar star = new BigStar("刘德华");
       Star starProxy = Proxy.createProxy(star);
        System.out.println(starProxy.sing("好运来"));
        System.out.println("----------------------");
        System.out.println(starProxy.dance());

    }
}

效果展示

细节分析代码的运行过程 

  • 对应 测试类 debug 可知


http://www.niftyadmin.cn/n/5865003.html

相关文章

电脑经常绿屏(蓝屏)怎么办(解决方法)?

一、排查系统与驱动问题 进入安全模式修复系统 强制重启电脑 3 次触发恢复环境&#xff0c;选择 疑难解答 > 高级选项 > 启动设置 > 重启&#xff0c;按 F5 或 5 进入带网络连接的安全模式3。 在安全模式下&#xff0c;尝试卸载最近安装的软件或更新&#xff0c;尤其…

Spring Cloud之注册中心之Nacos的安装

​​​​​​​ 目录 Nacos 简介 Nacos安装 Windows 修改单机模式 启动Nacos ​编辑常见问题 集群模式启动 端口号冲突 Linux 准备安装包 单机模式启动 开放端口号 启动并访问 Nacos 简介 2018年6⽉, Eureka 2.0宣布闭源(但是1.X版本仍然为活跃项⽬), 同年7⽉份…

本地Oracle数据库复制数据到Apache Hive的Linux服务器集群的分步流程

我们已经有安装Apache Hive的Linux服务器集群&#xff0c;它可以连接到一个Oracle RDS数据库&#xff0c;需要在该Linux服务器上安装配置sqoop&#xff0c;然后将Oracle RDS数据库中所有的表数据复制到Hive。 为了将本地Oracle数据库中的所有表数据复制到Apache Hive Linux服务…

Go语言设计模式之迭代器模式Iterator

迭代器模式 Iterator 提供了一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不需要暴露该对象的内部表示。迭代器模式的核心思想是将遍历逻辑从聚合对象中分离出来&#xff0c;使得聚合对象和遍历逻辑可以独立变化。 实际应用场景 集合类库&#xff1a; 如 Go 的…

Sui链开发:技术架构与生态实践深度解析(2025年最新进展)

一、Sui链的核心技术架构 1. 并行执行与对象模型 ui采用对象导向模型&#xff0c;将链上资产&#xff08;如NFT、代币&#xff09;视为独立对象&#xff0c;通过并行处理机制实现高吞吐量。每个对象的交易可独立验证&#xff0c;无需全局共识&#xff0c;显著提升处理效率&…

HTTP代理与HTTPS代理的区别及HTTPS的工作原理

在互联网世界中&#xff0c;数据的传输与访问安全性是用户和企业共同关注的焦点。HTTP和HTTPS代理作为两种常用的网络协议代理&#xff0c;它们在工作原理和应用场景上存在显著区别。本文将深入浅出地解析HTTP代理与HTTPS代理的区别&#xff0c;并简明扼要地介绍HTTPS的工作原理…

DeepSeek开源周首日:发布大模型加速核心技术可变长度高效FlashMLA 加持H800算力解码性能狂飙升至3000GB/s

FlashMLA的核心技术特性包括对BF16精度的全面支持&#xff0c;以及采用块大小为64的页式键值缓存&#xff08;Paged KV Cache&#xff09;系统&#xff0c;实现更精确的内存管理。在性能表现方面&#xff0c;基于CUDA12.6平台&#xff0c;FlashMLA在H800SXM5GPU上创下了显著成绩…

大模型在术后认知功能障碍预测及临床方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 研究创新点 二、术后认知功能障碍概述 2.1 定义与表现 2.2 危害与影响 2.3 发病机制与相关因素 三、大模型技术原理与应用现状 3.1 大模型技术原理 3.2 大模型在医疗领域的应用 四、基于大模型的术后认知…