首页 > 其他分享 >什么是动态代理

什么是动态代理

时间:2023-03-31 11:24:42浏览次数:31  
标签:StudentIntafce study 代理 public stu Student 动态 什么

 

 

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

public class Test {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.eat("蛋糕");
        stu.study();

        //如何在不改变Student类中任何代码的前提下,通过study()方法输出一句话:我在认真的学习中。。。
        //实现方式:使用动态代理
        /*
        动态代理:
        参数详解:ClassLoader loader  :类加载器,和被代理对象使用相同的加载器(被代理对象的类加载器)
                Class<?>[] interfaces  : 接口类型的class数组,和被代理对象使用相同的接口(被代理对象实现的接口)
                InvocationHandler : 代理规则,完成代理增强的功能
         */
        //代理对象StudentIntafce  被代理对象:Student
        StudentIntafce stuIntafce = (StudentIntafce) Proxy.newProxyInstance(stu.getClass().getClassLoader(), new Class[]{StudentIntafce.class}, new InvocationHandler() {
            //执行Student类中方法都会经过invoke方法
            //对method进行判断,如果是study,就进行增强,如果是其他方法,调用stu对象原有的功能即可
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                if ("study".equals(method.getName())) {
                    System.out.println("我在认真的学习中。。。");
                    return null;
                } else {
                    return method.invoke(stu, args);
                }
            }
        });

        stuIntafce.eat("烧烤");
        stuIntafce.study();
    }
}
public class Student implements StudentIntafce{

    public void eat(String food) {
        System.out.println("吃" + food);
    }

    public void study(){
        System.out.println("在学习中。。。");
    }
}
public interface StudentIntafce {

    void eat(String food);

    void study();
}

 

标签:StudentIntafce,study,代理,public,stu,Student,动态,什么
From: https://www.cnblogs.com/weiduaini/p/17275701.html

相关文章

  • 专业的Tiktok加速器是什么?Tiktok加速器有什么优势?
    在使用国际版抖音TikTok时,很多人会遇到网络缓慢的问题,这会影响他们的使用体验。为了解决这个问题,很多人开始寻找Tiktok加速器来加速网络。而在市场上,有一些专业的Tiktok加速器,具有海外静态独享节点IP可供选择、线路自由切换等功能,可以提供更好的加速效果。 本文将介绍一些专业......
  • 为什么苹果需要真正的电视机,而不仅仅是便宜的机顶盒?
    早在一年前,就有传言称苹果有开发电视机的计划。最近,自从《乔布斯传》发行,暗示苹果电视机的存在后,更是引发了各大报纸媒体纷纷撰文猜测。更有业内人士分析称,苹果有望在2013年推出电视机。一个还未出世的产品就激起了这么多人的兴趣和期待,这恐怕也只有苹果才能做到。在猜测的同时,是否......
  • imazing是什么?为什么选择 iMazing?
    说起iOS设备管理工具,可能大家还有点陌生,其实就是Apple公司开发的移动设备,因其的操作系统是独特的iOS系统,所以又叫iOS设备。比如大家都在用的iPhone手机,就是这样类型的一个设备。mazing是什么软件?iMazing是一款第三方的苹果iOS设备管理软件。大家将iPhone、iPad或iPod连接到电脑后,......
  • 为什么Groupon会走向衰落
    从AndrewMason最近给其股东的信件,以及Groupon兜售其GrouponNow软件150万美元的成交量的新闻发布中,我们已隐隐感觉到了Groupon的衰落迹象。Groupon推出的新移动平台软件GrouponNow相关部门已经开始裁员,而Groupon的股东希望其可以推出一些新东西来代替GrouponNow,因为它目前已经......
  • 为什么说数据库连接很消耗资源
    相信有过工作经验的同学都知道数据库连接是一个比较耗资源的操作。那么资源到底是耗费在哪里呢?本文主要想探究一下连接数据库的细节,尤其是在Web应用中要使用数据库来连接池,以免每次发送一次请求就重新建立一次连接。对于这个问题,答案都是一致的,建立数据库连接很耗时,但是这个耗时......
  • 衡量模块独立的定性标准是什么?用自己的话表达其含义。
    定性标准:衡量模块的独立性的标准是两个定性的度量标准:耦合性和内聚性。耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。含义:①耦合性也称块间联系,指软件系统结构中各模块间相互联系紧密......
  • Surge for Mac配置本地代理监听端口
    1setting-general  2advancedproxyservicesettings  3这里修改代理监听的端口  4不同的网站和不同的app都代理的话,需要根据监听协议修改跟surge的监听协议和端口一致,就可以通过代理来访问了,比如chrome的代理插件switchyOmega ......
  • 结构体里面定义一个该结构体类型变量为什么必须用指针
    一.错误:structTreeNode{intval;TreeNodeleft;TreeNoderight;};二.分析原因:如果在定义classA时,A域的类型是未定义的classA而不是指向classA对象的指针类型,编译器会尝试在编译时分配一块内存给A域,但由于classA的定义还没有出现,因此无法确定A域需要多......
  • C#变量类型有哪些,有什么区别
    C#变量类型分为 值类型、引用类型区别:值类型变量可以直接包含值数据直接储存在栈中引用类型包含变量的引用,通过引用找到值值类型包括:整型,浮点型,字符型(char),布尔型(bool),枚举型(enum),结构型(struct)。整型包含:byte,sbyte,short,ushort,int,uint,long,ulong;浮点型包括:floa......
  • 什么是模块化,为什么要模块化?
     所谓的模块化开发就是封装细节,提供使用接口,彼此之间互不影响,每个模块都是实现某一特定的功能。模块化开发的基础就是函数。模块化开发使代码耦合度降低,模块化的意义在于最大化的设计重用,以最少的模块、零部件,更快速的满足更多的个性化需求。  为什么要模块化。从程序开......