JavaEE互联网轻量级框架整合开发-1入门和技术基础-JDK代理

2023-05-16

JDK代理


/**
 * 1、定义接口
 */
public interface HelloYuan {
    public void sayHelloYuan();
}  


/**
 * 2、实现接口
 */
public class HelloYuanImpl implements HelloYuan{
    @Override
    public void sayHelloYuan() {
        System.out.println("Hello Yuan");
    }
}  


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

/**
 * 3、动态代理绑定和代理逻辑实现
 */
public class JdkProxyDemo implements InvocationHandler {
    //真实对象
    private Object target = null;

    /**
     * 建立代理对象和真实对象的代理关系,并返回代理对象
     * @param target
     * @return 代理对象
     *
     * Proxy.newProxyInstance(类加载器,生成的动态代理对象挂接在哪个接口下,定义实现方法逻辑的代理类)
     * this代表当前对象
     */
    public Object bind(Object target){
        this.target = target;
        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(),this);
    }

    /**
     *
     * @param proxy 代理对象:就是bind方法生成的对象
     * @param method 当前调度方法
     * @param args 当前方法参数
     * @return 代理结果返回
     * @throws Throwable 异常
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("进入代理逻辑方法");
        System.out.println("在调度真实对象之前的服务");
        //相当于调用sayHelloYuan方法
        Object obj = method.invoke(target, args);
        System.out.println("在调度真实对象后的服务");
        return obj;
    }
}  


/**
 * 4、测试JDK动态代理
 */
public class TestJdkProxy {
    public static void main(String[] args) {
        JdkProxyDemo jdkProxyDemo = new JdkProxyDemo();
        //绑定关系,因为挂在接口HelloYuan下,所以声明代理对象HelloYuan proxy
        HelloYuan proxy = (HelloYuan)jdkProxyDemo.bind(new HelloYuanImpl());
        //注意,此时HelloYuan对象已经是一个dialing对象,它会进入代理逻辑方法invoke里
        proxy.sayHelloYuan();
    }
}  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaEE互联网轻量级框架整合开发-1入门和技术基础-JDK代理 的相关文章

  • 通过用户POI经纬度获取居住地的房价信息

    Arcmap处理数据 1 建立Map和GDB2 加载数据3加载地图4 导出为点数据5 过滤错误数据6 将过滤后的数据保存为新图层7 转换坐标系为38578 IDW插值9 绘制渔网图Fishnet10 Zonal Statistics As
  • 天干地支

    以下是天干地支的称呼 xff1a 天干地支简称 干支 xff0c 十天干 xff1a 甲 xff08 ji xff09 乙 xff08 y xff09 丙 xff08 b ng xff09 丁 xff08 d ng xff09 戊 xff0
  • spring知识总结

    什么是spring spring是一套提供IOC和AOP功能架 xff0c 为简洁开发提供的一套轻量级框架 主要包括一下几个模块 xff1a spring context xff1a 提供框架式的bean访问方式 xff0c 以及企业级任务
  • CentOS7安装MySQL8.0图文教程(有图有真相,亲测可用)

    下载 MySQL 所需要的安装包 网址 xff1a https dev mysql com downloads mysql Select Operating System 选择 Red Hat xff0c CentOS 是基于红帽的 xff
  • GIT之【ERROR: commit count: 1, latest commit: xxxxx. missing Change-Id in message footer】

    项目场景 xff1a 在一次代码提交的时候 xff0c 怎么也无法提交成功 前情提要 该项目启动时 xff0c 报错npm ERR could not determine executable to run xff0c 然后我参考了这篇文章
  • 百度2020校招测试工程师笔试题 石头剪刀布

    Problem Description 西西打算和一头小猪进行N轮剪刀石头布 xff0c 初始时双方的分数都为0 xff0c 对每一轮而言 xff0c 如果不是平局则胜者得1分 xff0c 败者扣1分 小猪告诉西西它会在其中的M轮出石头 x
  • Activity生命周期(onNewIntent)

    两个Activity A中有一个button xff0c 点击打开B A和B的生命周期怎么执行 span class token class name A span span class token punctuation span onP
  • C# Newtonsoft.Json用法

    目录 一 创建JSON对象 二 创建JSON数组 三 使用Linq to JSON查询 四 将类对象序列化为Json 五 将Json反序列化为类对象 六 常用工具 1 判断Json是否正确 2 添加转义字符 3 去转义字符 4 压缩Json
  • ubuntu18.04安装谷歌浏览器

    1 下载安装包 span class token function wget span https dl google com linux direct google chrome stable current amd64 deb 遇到un
  • 在集群上运行Spark应用程序

    启动Spark集群 请登录Linux系统 xff0c 打开一个终端 启动Hadoop集群 cd usr local hadoop sbin start all sh 启动Spark的Master节点和所有slaves节点 cd usr lo
  • Linux Centos安装JDK1.8教程

    第一步 xff1a 先下载JDK1 8 xff0c 可以去官网下载 xff0c 也可以直接用我这里的 xff1a 下载地址 xff1a 链接 xff1a https pan baidu com s 1f1EDWvG GzpQRJaC W4S
  • 2019阿里校招面试【前端】(一)

    2019阿里校招面试一面 xff08 前端 xff09 问题 xff1a 项目里面遇到的困难promise请求失败如何返回原来页面call apply bind数组中找某个元素的方法和时间复杂度前端工程化继承的方式跨域前端安全vuex和re
  • centos 7 查看IP地址不存在

    1 安装了一般centos 7服务版尽然不能访问产看IP地址说明没有存在 错误信息提示 xff1a 2 查看本机是否分配了网关输入命令 ip addr 提示信息 xff1a 3 然后我们进入网卡配置文件的目录 执行命令 cd etc sys
  • python实现图的深度优先遍历(DFS)和广度优先遍历(BFS)算法

    span class token comment 图的深度优先和广度优先遍历 span span class token keyword def span span class token function DFS span span cl
  • ubuntu以管理员身权限开机自启动自己的服务

    1 打开终端 xff0c 运行命令 sudo apt install nautilus admin 2 安装扩展后 xff0c 运行命令 nautilus q 3 如果在MATE或UKUI桌面上运行 xff0c 则可以将nautilus a
  • 新版ubuntu20.04 使用root用户并自动登录

    Ubuntu系统默认屏蔽了root登录权限 xff0c 每次都要在终端给予权限 1 开启root用户登录权限 a 为root设置密码 sudo passwd root 密码强度要高 xff0c 负责设置不成功 b 修改50 ubuntu c
  • ubuntu实现定时重启

    1 首先安装cron服务 sudo apt get install cron y 2 通过以下命令来设置定时重启 xff1a sudo crontab e 10 2 reboot ctrl 43 X退出 xff0c 然后输入Y xff0c
  • ubuntu普通用户加入管理员组

    sudo adduser wzj root 说明 xff1a 该命令意思是将普通用户 34 wzj 34 到 34 root 34 组 xff0c root组为管理员组
  • Ubuntu20.04总是弹出检测到系统程序出现问题的解决方法

    解决Ubuntu系统中的程序崩溃报告 xff0c 打开一个终端 xff0c 输入以下命令 xff1a sudo vim etc default apport 把文件最后一行的把enabled 61 1改为enabled 61 0 保存并关闭
  • ubuntu下chorme提示输入秘钥环的解决方法

    终端输入执行 sudo rm local share keyrings login keyring 然后重启电脑 设置密码为空

随机推荐

  • 将自己的ubuntu20.04做成镜像

    1 安装pinguy https sourceforge net projects pinguy os files ISO Builder 下载pinguybuilder 5 2 1 all deb sudo apt span class
  • RustDesk实现win 和 ubuntu远程控制

    1 下载RustDesk http rustdesk com zh 2 在window上安装 xff1a 3 在Ubuntu上安装 xff0c 进入到下载目录下 xff0c 执行 sudo apt span class token oper
  • Linux系统自带spi驱动加载及应用程序编写方法详解

    硬件平台 xff1a 飞思卡尔IMX6 xff0c 内核版本 xff1a kernel3 0 35 Linux系统中 xff0c 和I2C一样 xff0c SPI也有系统自带的设备驱动程序 xff0c 位于源码目录下drivers spi
  • Linux shell 一键安装JDK脚本

    1 下载jdk 8u333 linux x64 tar gz压缩包 xff0c 放到服务器 home docker data 文件夹下 2 放到服务器任意目录下执行sh jdk install sh bin bash CRTDIR 61 p
  • Ubuntu20.04设置永久ip

    1 使用 ifconfig 查看ip和网关名称 2 修改 etc netplan 01 network manager all yaml的yaml文件中配置IP地址 sudo vi etc netplan 01 network manage
  • Ubuntu20.04不支持wayland和触摸键不能用的问题

    sudo vim etc gdm3 custom conf 把 WaylandEnable 61 false 的注释 号去掉 sudo service gdm3 restart
  • ubuntu20.04不显示wifi图标

    1 安装wifi网卡驱动 xff08 找一根网线接到电脑上 xff09 xff0c 打开ubuntu的软件和更新 更新完成后重启电脑手动选择wifi即可 前面的方法试过了一般就能解决问题 xff0c 如果还是不能解决问题就试试下面的方法 2
  • Ubuntu20.04开机自动运行sh脚本

    1 创建rc local service文件 sudo cp lib systemd system rc local service etc systemd system 2 然后修改rc local service sudo vim et
  • ps -ef与kill结合杀进程

    ps ef grep home docker data qidong html grep v grep awk 39 print 2 39 xargs kill 9 参数详解 xff1a 1 查看进程 xff08 进程中包含 home do
  • linux中shell脚本监控端口或者接口是否正常访问

    1 监听端口 sudo vim check port sh bin bash ETMPORT 61 netstat alnt grep c 34 9443 34 while ETMPORT eq 0 do sleep 10 ETMPORT
  • ubuntu 如何禁止Chrome弹出无法更新的提示窗

    方法1 禁用更新 sudo apt mark hold google chrome stable 目前发现过一段时间还是会提示更新 xff0c 可以设置开机自启运行这段代码 方法2 删除更新程序 rm rf Library Google G
  • Mysql查看数据库时区并设置时区

    当我们使用docker部署Mysql数据库后 xff0c 我们的数据库时区会有偏差 xff0c 下面我们看看如何解决 xff1a 1 查看数据库时区 show variables like 39 time zone 39 2 设置时区 修改
  • Linux环境下如何解压jar包,压缩jar包文件

    1 解压jar包文件里面的文件 jar xvf jar xvf test jar BOOT INF classes com hsc test MyTest class 解释说明 xff1a 解压 test jar包里面的MyTest cla
  • 基数排序

    基数排序 一 什么是基数排序二 基数排序的代码实现三 总结 一 什么是基数排序 基数排序属于非比较类排序 非比较类排序包括计数排序 基数排序 桶排序 基数排序是由计数排序改善而来的 xff0c 基数排序将整数或者字符串切分不同的数字或字符
  • win11怎么取消显示更多选项

    1 点击Windows键 xff0c 输入cmd xff0c 然后选择以管理员运行cmd xff0c 最后敲入下面命令 reg add HKCU Software Classes CLSID 86ca1aa0 34aa 4e8b a509
  • Docaker部署Nginx配置多个域名

    1 拉取nginx镜像 sudo docker pull nginx 2 映射端口指定配置文件和前端目录 sudo docker run d p 9524 9524 p 9525 9525 p 10080 10080 restart alw
  • 硬件消抖——开关并联电容的那点事儿

    硬件消抖 开关并电容的那点事儿 一年前做过的小脚丫的消抖实验和不消抖实验的区别 xff0c 开关如果不消抖 xff0c 产生的毛刺和电平变化确实给开关带来了不良影响 xff0c 比如按键不灵 xff0c 需要按暂停或者切换的时候要反复按多次
  • 微信电脑版登录不了了,怎么办?不显示二维码

    今天微信开发者工具不显示二维码 xff0c 很尬 xff0c 找了好了方法 xff0c 最满意的一个如下 xff0c 如果解决了 xff0c 记得给我点赞 电脑上无法登录微信的解决方法 xff1a 1 先退出电脑微信登录页面 2 按Win
  • eclipse集成git关联到gitee同步代码

    eclipse集成git关联到gitee同步代码 1 注册gitee2 eclipse集成git3 eclipse配置git4 gitee配置用户ssh公钥5 本地新建项目提交到本地git仓库6 本地git仓库提交到远程gitee仓库7 修
  • JavaEE互联网轻量级框架整合开发-1入门和技术基础-JDK代理

    JDK代理 1 定义接口 public interface HelloYuan public void sayHelloYuan 2 实现接口 public class HelloYuanImpl implements HelloYuan