第十八节:第八部分:java高级:动态代理设计模式介绍、准备工作、代码实现

程序为什么需要代理以及代理长什么样

如何为java对象创建一个代理对象

代码:

BigStar类

java 复制代码
package com.itheima.day11_Proxy;

public class BigStar implements Star {
    private String name;

    public BigStar(String name) {
        this.name = name;
    }
    public String sing(String name) {
        System.out.println(this.name+"正在唱:"+name);
        return "谢谢~~谢谢~~";
    }
    public void dance() {
        System.out.println(this.name+"正在优美的跳舞~~");
    }

}

Star接口

java 复制代码
package com.itheima.day11_Proxy;

public interface Star {
    String sing(String name);
    void dance();
}

ProxyUtil类(代理工具类)

java 复制代码
package com.itheima.day11_Proxy;

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

public class ProxyUtil {
    public static Star createProxy(BigStar bigStar){
        /*
        * 参数1:用于指定一个类加载器(一般固定写法)
        * 参数2:指定生成的代理长什么样子,也就是有哪些方法
        * 参数3:用来指定生成的代理对象要干什么事情
        * */
        //Star starProxy=ProxyUtil.createProxy(s)
        // starProxy.sing("好日子") starProxy.dance
        Star starProxy = (Star) Proxy.newProxyInstance(ProxyUtil.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("准备场地,收费1000万");
                        }
                        return method.invoke(bigStar,args);
                    }
                });
        return starProxy;
    }
}

Test类(主程序)

java 复制代码
package com.itheima.day11_Proxy;

public class Test {
    public static void main(String[] args) {
        BigStar s =new BigStar("杨超越");
        Star starProxy = ProxyUtil.createProxy(s);
        String rs = starProxy.sing("好日子");
        System.out.println(rs);
        starProxy.dance();
    }
}
相关推荐
zone773919 分钟前
004:RAG 入门-LangChain读取PDF
后端·python·面试
zone773924 分钟前
005:RAG 入门-LangChain读取表格数据
后端·python·agent
NE_STOP25 分钟前
MyBatis-参数处理与查询结果映射
java
狂奔小菜鸡1 小时前
Day40 | Java中的ReadWriteLock读写锁
java·后端·java ee
SimonKing2 小时前
JetBrains 用户狂喜!这个 AI 插件让 IDE 原地进化成「智能编码助手」
java·后端·程序员
狂奔小菜鸡2 小时前
Day39 | Java中更灵活的锁ReentrantLock
java·后端·java ee
树獭非懒14 小时前
AI大模型小白手册|Embedding 与向量数据库
后端·python·llm
NE_STOP15 小时前
MyBatis-配置文件解读及MyBatis为何不用编写Mapper接口的实现类
java
唐叔在学习17 小时前
就算没有服务器,我照样能够同步数据
后端·python·程序员
曲幽19 小时前
FastAPI流式输出实战与避坑指南:让AI像人一样“边想边说”
python·ai·fastapi·web·stream·chat·async·generator·ollama