首页 > 其他分享 >动态代理:创建、工作流程演示

动态代理:创建、工作流程演示

时间:2023-06-09 19:13:41浏览次数:34  
标签:演示 String 流程 代理 System println Star public name

 

package Karl.Demo.DaiLi;

public class Test {
    public static void main(String[] args) {
        BigStar s=new BigStar("杨超越");
        Star star=ProxyUtil.createProxy(s);
        String rs=star.sing("好日子");
        System.out.println(rs);
    }
}
package Karl.Demo.DaiLi;

public interface Star {
    String sing(String name);
    void dane();
}
package Karl.Demo.DaiLi;

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

public class ProxyUtil {
    //设置createProxy方法
    //返回值为Star
    public static Star createProxy(BigStar bigStar){
       /* public static Object newProxyInstance(ClassLoader loader,
                Class<?>[] interfaces,
                InvocationHandler h)
                参数1:用于指定一个类加载器
                参数2:指定生成的代理长什么样子,也就是有哪些方法
                参数3:用来指定生成的代理对象要干什么事情*/

        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万");
                        }
                        //返回给上面的bigStar参数
                        return method.invoke(bigStar,args);
                    }
                });
        //返回给上面的starProxy方法
        return starProxy;
    }
}
package Karl.Demo.DaiLi;

public class BigStar implements Star{
    //设置成员变量name
    private String name;
    //把传入的name赋值给本类成员变量name
    public BigStar(String name){
        this.name=name;
    }


    //重写接口方法
    @Override
    //设置方法传入name
    public String sing(String name) {
        //获取本类name获取传入的name
        System.out.println(this.name+"正在唱:"+name);
        //返回值
        return "谢谢大家!";
    }

    @Override
    //因为跳舞没有名字所以没有传入name
    //void表示没有返回值
    public void dane() {
        System.out.println(this.name+"正在优雅的跳舞");
    }
}

 

 

 

标签:演示,String,流程,代理,System,println,Star,public,name
From: https://www.cnblogs.com/Karl-hut/p/17470060.html

相关文章

  • 图文详解丨iOS App上架全流程及审核避坑指南
    到了2021年,虽然网上也有大牛写过很多IOSApp上架流程资料,但随着苹果发布机制的微调有些已经过时了。我就趁着这次刚刚发布成功的鲜活经验,记录下来,做一下补充。1、首先得注册AppleDeveloper的开发者账号,最后如果要上架苹果商店,这个账号是要交年费的,核算下来大概600多元人民币。......
  • 图文详解丨iOS App上架全流程及审核避坑指南
    图文详解丨iOSApp上架全流程及审核避坑指南到了2021年,虽然网上也有大牛写过很多IOSApp上架流程资料,但随着苹果发布机制的微调有些已经过时了。我就趁着这次刚刚发布成功的鲜活经验,记录下来,做一下补充。1、首先得注册AppleDeveloper的开发者账号,最后如果要上架苹果商店,这个账......
  • golang实现设计模式之代理模式-优缺点,适用场景
    代理模式作为一种结构型的设计模式,因为某种原因,需要对访问的对象通过代理访问目标对象,访问对象不适合或者不能直接引用该目标对象,代理就成为访问对象和目标对象的中介。结构1.抽象主题(Subject)类。通过接口或抽象类声明真实主题和代理对象实现的业务方法。2.真实主题(RealSubje......
  • iOS App的打包和上架流程
    ​   转载:iOSApp的打包和上架流程-掘金1.创建账号苹果开发者账号几种开发者账号类型个人开发者账号费用:99美元/年(688.00元)协作人数:仅限开发者自己不需要填写公司的邓百氏编码(D-U-N-SNumber)支持账号下的app上线AppStore需要创建AppleID公司开发者账号:......
  • 解析隧道代理IP与API代理IP的区别
    隧道代理IP和API代理IP是两种常见的代理IP类型,它们在实现方式和使用场景上有一些区别。第一部分:隧道代理IP的特点和用途隧道代理IP:隧道代理IP(TunnelProxyIP)是通过在客户端和目标服务器之间建立一个隧道连接来实现代理的。具体来说,隧道代理IP会在客户端和目标服务器之间扮演中间人......
  • JDK 动态代理 和 CGLIB 动态代理 的区别【SpringAOP】
    一、原理区别(版本一)Java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。1、如果目标对象实现了接口,默认......
  • 正向代理和反向代理
    正向代理:它代理了客户端,相当于代理服务器去访问目标网址。服务器不知道真正的用户是谁(解决访问问题)1、隐藏用户真实地址信息。因为代理服务器相当于客户端,所以与目标网站直接交互的是代理服务器而非用户。2、突破ip访问限制。使公司内部搭建的局域网链接互联网。......
  • ASEMI代理英飞凌TLD5097EL:理解和使用LED驱动器的综合指南
    编辑-ZTLD5097EL是一款创新的LED驱动器,在照明行业掀起了波澜。这项先进的技术提供了广泛的好处,包括提高能源效率、延长使用寿命和增强性能。在本综合指南中,我们将探讨TLD5097EL的功能和优点,并提供如何有效利用该LED驱动器优化照明解决方案的提示。 什么是TLD5097EL?TLD5097EL是一款......
  • ASEMI代理英飞凌TLE4250-2G汽车级线性稳压器
    编辑-ZTLE4250-2G参数描述:型号:TLE4250-2G输入电压VI:45V输出电压VQ:40V结点温度Tj:-40~150℃储存温度Tstg:-50~150℃输出电容器要求CQ:1µF连接到焊接点RthJSP:30K/W电源纹波抑制PSRR:48dB输出电流限制IQ,max:85mA反向电流IQ:-1mA负输入电压下的反向电流II:-2mA TLE4250-2G特征:50mA输出电......
  • activiti流程引擎 使用
    什么是Activiti?Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人TomBaeyens是JBossjBPM的项目架构师,它特色......