首页 > 编程语言 >JAVA动态代理

JAVA动态代理

时间:2025-01-20 18:57:41浏览次数:3  
标签:JAVA String 对象 代理 Stu 动态 public name

什么是动态代理

    动态代理是一种设计模式,允许开发者在运行时动态地创建实现了一组接口的代理对象。这些代理对象在调用目标对象的方法时,可以在方法调用前后添加自定义的逻辑,而无需修改目标对象的代码。动态代理的核心思想是提供一种灵活的方式来增强或改变原有对象的行为。

动态代理的实现 

    首先要定义一个接口,这个接口要包含想要被代理的方法:

public interface Stu {
    public String sing(String name);

    public void dance();
}

    接着写一个实现类去实现这个接口,也就是被代理类:

public class Student implements Stu{
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Student(String name) {
        this.name = name;
    }

    public Student() {
    }

   @Override
    public String sing(String name){
        System.out.println(name+"唱歌....");
        return "唱完了";
    }

    @Override
    public void dance(){
        System.out.println("跳舞");
    }
}

    接着创建一个代理对象java.lang.reflect.Proxy类提供了为对象创建代理对象的方法:

public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)

参数一:用于指定用哪个类加载器,去加载生成的代理类

参数二:指定接口,这些接口用于指定生成的代理有哪些方法

参数三:用于指定生成的代理对象要做什么。

public class ProxyUtil {
    //创建代理对象
    public static Stu createProxy(Student student) {
        Stu stu = (Stu) Proxy.newProxyInstance(
                ProxyUtil.class.getClassLoader(),
                new Class[]{Stu.class},
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        /*
                        参数一:代理的对象
                        参数二:要运行的方法
                        参数三:调用方法时传递的实参
                        * */
                        if(method.getName().equals("sing")){
                            System.out.println("准备调用sing方法");
                        }else if(method.getName().equals("dance")){
                            System.out.println("准备调用dance方法");
                        }
                        return method.invoke(student,args);

                    }
                });
        return stu;
    }
}

接着在测试类中获取代理对象:

public class Main {
    public static void main(String[] args) {
        //获取代理对象
        Student student = new Student("小猫");
        Stu pro = ProxyUtil.createProxy(student);
        String s = pro.sing("哈基米");
        System.out.println(s+"===");

        pro.dance();
    }
}

标签:JAVA,String,对象,代理,Stu,动态,public,name
From: https://blog.csdn.net/m0_74386799/article/details/145244991

相关文章

  • 动态监控主动上位-哨兵(Sentinel)
    动态监控主动上位在RedisSentinel的高可用架构中,动态监控主动上位(通常称为故障转移或自动故障转移,failover)是Sentinel执行的一个关键流程,它确保在主节点出现故障时,自动将某个从节点提升为新的主节点,从而保证Redis服务的持续可用性。下面我们将详细介绍Sentinel......
  • 在Java中什么是异常
    目录         一、定义:二、异常的类型1、检查型异常(CheckExceptions)2、运行时异常(RuntimeExceptions)3、错误(Errors)三、异常处理机制1、try-catch块2、finally块3、throws关键字四、自定义异常1、定义:2、示例:一、定义:异常(Exception)是在程序执行过程......
  • 【K8S系列】K8s 领域深度剖析:年度技术、工具与实战总结 (思维导图-java架构)
    创建一个关于Kubernetes(简称K8s)领域的深度剖析年度总结的思维导图,特别是针对Java架构师的需求,可以帮助梳理和理解过去一年中重要的技术进展、工具以及实战经验。下面是一个基于文本的思维导图结构建议,你可以根据这个结构使用任何思维导图软件来创建你的图形化版本。Kuberne......
  • AI编程工具使用技巧——Cursor (思维导图-java架构)
    Cursor是一个AI辅助编程工具,它能够帮助开发者更快地编写代码、理解现有代码库以及解决编程中遇到的问题。当涉及到Java架构时,利用Cursor可以极大地提高开发效率和代码质量。以下是围绕着如何使用Cursor进行Java项目开发的思维导图建议框架:AI编程工具使用技巧-Cursor(Java......
  • 人脸识别【java-基于OpenCV】思维导图-java架构
    为了创建一个关于基于OpenCV的Java人脸识别项目的思维导图,可以围绕项目的主要组成部分进行组织:环境搭建、数据准备、人脸检测、特征提取、模型训练、识别与验证、以及优化和部署。以下是一个结构化的建议框架,你可以根据这个框架使用任何思维导图软件来创建具体的图形化版本......
  • JAVA开源毕业设计 在线课程管理系统 Vue.JS+SpringBoot+MySQL
    本文项目编号T137,文末自助获取源码\color{red}{T137,文末自助获取源码}......
  • Java初学者笔记-08、IO流
    I:负责把磁盘和网络中的数据读到程序内存中去。O:负责把程序内存中的数据写到网络或者磁盘中。按照流的内容,IO流分为字节流和字符流。字节流:最小单位是字节。适合操作所有类型的文件。比如音频、视频、图片文本等的复制,转移。字符流:只适合操作纯文本文件。比如读写txt,java文件......
  • RabbitMQ 及 java 使用
    目录1.消息中间件概述1.1.什么是消息中间件1.2.AMQP和JMS1.2.1.AMQP1.2.2.JMS1.2.3.AMQP与JMS区别1.3.消息队列产品1.4.RabbitMQ2.RabbitMQ入门2.1.搭建示例工程2.1.1.创建工程2.1.2.添加依赖2.2.编写生产者2.3.编写消费者2.4.小结3.AMQP3.1.相关概念介绍3.......
  • 使用 Java 获取淘宝推荐商品列表 API 接口的示例代码解析
    在电商领域,推荐系统是提升用户体验和促进销售的重要工具。淘宝开放平台提供了taobao.item.recommend接口,允许开发者根据用户行为、搜索关键词或分类ID获取推荐商品列表。本文将详细介绍如何使用Java调用该接口,并解析返回的数据。一、淘宝推荐商品接口简介taobao.item.reco......
  • (2024最新毕设合集)基于SpringBoot的游乐园管理系统-69394|可做计算机毕业设计JAVA、PHP
    目录1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.1.1经济可行性2.1.2技术可行性2.1.3操作可行性2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添加信息流程2.2.5......