第十八节:第八部分: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();
    }
}
相关推荐
挖掘狂人5 分钟前
同一个端口能不能被两个程序同时监听?
java·后端·程序员
codigger9 分钟前
同一个端口能不能被两个程序同时监听?
java·后端·程序员·编程
西索斯coding9 分钟前
qwen3.8-max-0902 和 minimax-m3 改真实仓库差多少?2026 年 50 个缺陷复现实测框架
java·服务器·网络·ai
扶尔魔ocy14 分钟前
【QT C++】常用设计模式
c++·设计模式
2501_9339232517 分钟前
SpringCloud:OpenFeign快速实现
java·后端·spring cloud·openfeign
m0_7381207222 分钟前
JWT 安全从入门到实战:六种典型攻击场景解析
前端·网络·python·安全·网络安全
用户2986985301424 分钟前
Python 实现 HTML 转纯文本:两种场景下的文档模型方案
python·html·api
denlaku25 分钟前
JDK 26 新特性详解
java
SL_staff29 分钟前
3分钟完成业务规则调整:告别代码修改,实现拖拽式逻辑配置
java·低代码·全栈
Flynn Liang34 分钟前
让 AI 查订单、查库存、发消息:Spring AI 自定义工具(Tool)实战与工具描述工程
java·人工智能·spring·函数调用·springai·tool·自定义工具