首页 > 其他分享 >宋红康老师关于动态代理举例的代码理解

宋红康老师关于动态代理举例的代码理解

时间:2022-10-24 12:55:09浏览次数:42  
标签:obj String invoke 代码 Object public 举例 void 宋红康

package proxy;

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

/**

  • 动态代理的举例
  • */

interface Human{
String getBelief();
void eat(String food);
}

class SuperMan implements Human{

@Override
public String getBelief() {
    return "I belief i can fly!";
}

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

}

public class ProxyTest {

static Object getInstance(Object obj){
    MyInvo myInvo = new MyInvo();
    myInvo.bind(obj);
    return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(),myInvo);
}

public static void main(String[] args) {
    SuperMan superMan = new SuperMan();
    Human instance = (Human) ProxyTest.getInstance(superMan);
    String belief = instance.getBelief();
    System.out.println(belief);
    instance.eat("四川麻辣烫!");
}

}

class MyInvo implements InvocationHandler{

private Object obj;

public void bind(Object obj){
    this.obj = obj;
}

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//这里的Object proxy参数干吗用的?
    Object invoke = method.invoke(obj, args);
    return invoke;
}

}

标签:obj,String,invoke,代码,Object,public,举例,void,宋红康
From: https://www.cnblogs.com/dequanth/p/16821119.html

相关文章

  • 2022-10-24 记录uniapp根据条件编译从而使部分代码在不同的条件下生效
     条件编译写法说明#ifdef APP-PLUS需条件编译的代码#endif仅出现在App平台下的代码#ifndef H5需条件编译的代码#endif除了H5平台,其它平台均存在的......
  • tideways+toolkit对php代码进行性能分析
    安装tideways拓展gitclonehttps://github.com/tideways/php-xhprof-extension.gitcdphp-xhprof-extension//usr/local/php-7.4.24/bin/phpize./configure--with-php-co......
  • android系统上编写、运行C#代码
    最近找到个好玩的APP,C#Shell(CompilerREPL),可以在安卓系统上编写和运行C#代码,配合sqlite数据库,写了个小爬虫,运行还不错;运行一些小爬虫或者定时任务可以用这个,毕竟手机比......
  • Redis代码实现
    Redis是一个高性能的key-value数据库,有以下三个特点:1.支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。2.不仅仅支持简单的key-value......
  • JS之循环发送请求代码优化
    需求:将数组中的值作为参数,循环调用新增接口实现批量导入功能。因为接口调用有时间间隔限制,避免误操作,所以需要设置接口请求的间隔时间。原代码如下:constrecursive=(a......
  • 如何用vscode调试远程服务器pymarl框架代码
    前言pymarl是多智能体强化学习算法在星际争霸II游戏上的一个框架,之前都是用pycharm调试,后面想用vscode,就去了解了下。配置在vscode里面点击运行,然后点击添加配置。......
  • 「趣学前端」给不懂技术的朋友简单演示,代码是怎么被编写出来的
    灵感来源我的家人和身边非程序员的朋友们,对我的工作多多少少带点好奇心。尤其是家人学会使用智能手机,应用程序千千万,七彩界面迷人眼。这当中,总有某块功能是前端开发写出来的......
  • OpenGlES:如何加载着色器代码
    加载着色器程序:参考链接:https://juejin.cn/post/7134356782452834334对应于代码实现:ps:一个是着色器对象,表示一段具体的着色器代码的抽象,另一个是着色器程序,表示整个图形......
  • LinkedList源代码深入剖析
    集合框架中的接口除了类集接口之外,类集也是用Comparator,Iterator和ListIterator接口。简单地说,Comparator接口定义了两个对象如何比较;Iterator和ListItera......
  • HTML滚动条样式代码及使用技巧
    HTML滚动条样式代码及使用技巧2022-04-2109:47更新在html网页中,我们都知道大篇幅的长文章会占据网页的大部分空间,影响了整体网站页面的美观性和阅读体验,因此,在......