第十八节:第八部分: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();
    }
}
相关推荐
2601_963869951 小时前
【计算机毕业设计】基于 Spring Boot+Vue的手工体验馆管理系统的设计与实现
java·spring boot·后端
曹牧1 小时前
Java:BeanListHandler
java·数据库·oracle
0566467 小时前
agent学习Day15——SQLAlchemy 查询过滤、分页与历史列表接口
python·学习·fastapi
白鸽(二般)8 小时前
MinIO Java Client API
java·开发语言
程序员爱德华8 小时前
Python与C++:异同点对比
c++·python
hangyuekejiGEO8 小时前
GEO技术服务选型指南
大数据·人工智能·python
软萌萌的19 小时前
Java Spring Boot 修改yml配置&加载顺序规则
java·spring boot·python
IT小盘9 小时前
13-企业Prompt模板-角色任务约束与输出格式
java·前端·prompt
爱敲键盘的猴子9 小时前
Java并发编程 -- volatile
java·java并发
Dxy123931021610 小时前
Linux 编译安装 Python 3.12.10(多版本共存,不破坏系统Python)
linux·运维·python