java动态代理--JDK代理

news2024/11/25 6:47:24

1.概述

JDK动态代理:只能代理实现了接口的类,代理对象是实现了目标对象所有接口的代理类

使用java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口来创建代理对象,工作通过反射机制完成。

2.实现接口InvocationHandler

/**
 *  * 1. jdk动态代理,要求必须有接口,最终生成的代理类和目标类实现相同的接口,
 *  在com.sun.proxy包下,类名为$proxy+数字 (例如:$proxy6)
 */
public class MyInvocationHandler implements InvocationHandler {

    private Object target;

    public MyInvocationHandler(Object target) {
        super();
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("[JDK动态代理]--方法:"+method.getName()+",参数:"+ Arrays.toString(args));
        this.tuoKuzi();
        Object result = method.invoke(target, args);
        this.chuanKuzi();
        System.out.println("[JDK动态代理]--方法:"+method.getName()+",结 果:"+ result);
        return result;
    }


    /**
     * 生成代理类
     * 第二个参数interfaces 所以必须要继承一个接口
     */
    public Object creatProxyedObj()
    {
        /**
         * ClassLoader 获取代理对象的类加载器
         * Class<?>[] interfaces:被代理对象实现的所有接口数组
         * 当通过代理类的对象发起对被重写的方法的调用时,都会转换为invoke方法的调用
         */
        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    }

    private void chuanKuzi() {
        System.out.println("后置:大威德3秒就结束了,提起裤子");
    }

    private void tuoKuzi() {
        System.out.println("前置:大威德脱裤子,带上冈本");
    }

}

3.被代理的类以及接口

public interface IKaifangService {
    int yuehui(String name);
}

public class KaifangServiceImpl implements IKaifangService {
    @Override
    public int yuehui(String name){
        System.out.println("何由一相见,灭烛解罗衣---" + name);
        return 1;
    }

}

4.测试类

public class JdkTest {

    public static void main(String[] args) {
        IKaifangService kaifangService = new KaifangServiceImpl();
        MyInvocationHandler myInvocationHandler = new MyInvocationHandler(kaifangService);
        IKaifangService proxy  = (IKaifangService) myInvocationHandler.creatProxyedObj();
        //人间中毒女主角
        proxy.yuehui("林智妍");
    }
}

5.结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1604788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

37、Tomato(VulnHub)

Tomato 一、nmap 2211是ssh的端口&#xff0c;21的ftp也不是弱密码 二、web渗透 随便看看 目录爆破 /seclists/Discovery/Web-Content/common.txt /antibot_image/antibots/readme.txt 发现该站点存在反爬机制 /antibot_image/antibots/info.php 提示我们该网页存在个参数 GET&…

汇编语言——将DX,AX组成的32位数逻辑左移3位

data segment data ends stack segment stacktop label worddw 100 dup (?) stack ends code segmentassume cs:code,ds:data,ss:stack main proc farmov ax,datamov ds,axmov ax,stackmov ss,axlea sp,top;0000 0001 1100 1010 | 0000 0010 0001 1111;逻辑左移三位后&#xf…

VsCode调试远程服务器上面的Docker容器

第一步 VsCode 连接ssh 下载安装VsCode(Visual Studio Code)&#xff0c;首次安装会提示你安装Chinese(Simplified)中文简体&#xff0c;安装完后重新打开就是汉化界面了。在左边侧边栏找到扩展选项&#xff0c;然后安装Remote Development插件&#xff0c;里面包含了Remote S…

FAT16文件系统

FAT16 大端存储&#xff1a;高位字节放在低地址端&#xff0c;低位字节放在高地址端。 小端存储&#xff1a;低位字节放在低地址端&#xff0c;高位字节放在高地址端。 举一个例子&#xff0c;比如数字0x12 34 56 78在内存中的表示形式为&#xff1a; 大端模式&#xff1a; 低地…

【Gradle】Gradle的构建过程

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置&#xff0c;也增加了基于Kotlin语言的kotlin-based DSL&#xff0c;抛弃了基于XML的各种繁琐配置。 面向Java应用为主。当前其支持的语言C、J…

二、pwn - 零基础ROP之PIE保护绕过-碰撞

欲学本文,先看前文:一、pwn - 零基础ROP之Android ARM 32位篇(新修订,精华篇)-CSDN博客 代码、文件同第一篇,自行复制。本文唯一区别在于,我们不利用vulnerable_function打印的地址,无法定位pie base地址,直接随机碰撞(爆破)~ 有一定比例成功的可能,贴近实战! 多…

终于总结出一套小红书万能涨粉公式

新手做小红书&#xff0c;最关心的除了变现、提升流量、应该就是涨粉了。 但关于小红书涨粉&#xff0c;小伙伴表示难如登天&#xff0c;臣妾做不到啊。 别担心&#xff0c;小易拆解近100个博主账号后&#xff0c;终于总结出小红书涨粉公式&#xff0c;垂直不违规干货人设活跃…

IDEA2024配置RunDashBoard(Services)面板

IDEA2024配置RunDashBoard(Services)面板 新版本的IDEA没有RunDashBoard&#xff0c;取而代之的是Services面板&#xff0c;不需要配置workspace.xml文件; 本文教你简单的方法就能一个SpringBoot的Main运行多次&#xff0c;方便调试。 1、配置启动类 导航栏&#xff0c;Edit…

基于SpringBoot的“外卖点餐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“外卖点餐系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能图 用户功能界面 订单管理界面 配送单管…

IO基础合集

IO基础合集 1. File类1.1 概述1.2 构造方法1.3 常用方法获取功能的方法绝对路径和相对路径判断功能的方法创建删除功能的方法 1.4 目录的遍历 2. IO概述2.1 什么是IO2.2 IO的分类2.3 IO的流向说明图解2.4 顶级父类们2.5 IO流体系结构 3. 字节流3.1 一切皆为字节3.2 字节输出流【…

PTA 编程题(C语言)-- 特殊a串数列求和

题目标题&#xff1a; 判断素数 题目作者&#xff1a;颜晖 浙大城市学院 给定两个均不超过9的正整数a和n&#xff0c;要求编写程序求aaaaaa⋯aa⋯a&#xff08;n个a&#xff09;之和。 输入格式&#xff1a; 输入在一行中给…

Java项目:基于SSM框架实现的心遗非遗文创电商平台(源码+数据库)

一、项目简介 本项目是一套基于SSM框架实现的心遗非遗文创电商平台 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、…

过来人的经验告诉你,精益管理培训值得一试!

精益管理作为一种被全球众多企业验证过的有效管理模式&#xff0c;越来越受到企业的青睐。那么&#xff0c;作为一个过来人&#xff0c;我想分享一些关于精益管理培训是否值得参加的看法和经验。 精益管理培训的价值&#xff0c;不仅仅在于学习一套理论知识&#xff0c;更在于掌…

4.16作业

1.总结keil5下载代码和编译代码需要注意的事项 一、在编译代码时需要先点击魔术棒点击 修改flash Downlond 和pack 二、可以通过F12转跳到对应的函数中&#xff0c;查看函数的原型 三、注释出现乱码通过 Edit中的中的来修改 四、要先bulid在load 2.总结STM32Cubemx的使用方…

如何批量把照片转为jpg?批量转jpg最简单方法

如果伙伴们经常在下载保存图片的话就会发现&#xff0c;大多会以png等格式被保存下来。但是jpg格式兼容性比较好&#xff0c;为了方便使用通常都会将图片都转换成jpg格式。一张张地转化未免太过麻烦&#xff0c;那怎么把图片批量转为jpg? 压缩图网站&#xff0c;点击“图片转…

海尔推行TPM管理的经验分享:打造高效制造新标杆

海尔集团&#xff0c;作为家电行业的佼佼者&#xff0c;其推行TPM&#xff08;全面生产维护&#xff09;管理的成功经验&#xff0c;无疑为众多寻求管理突破的企业提供了宝贵的借鉴。 一、TPM管理的核心理念 TPM&#xff08;Total Productive Maintenance&#xff09;即全面生…

异地远程桌面软件,比向日葵,todesk更好用

在平时异地远程其他电脑&#xff0c;只能借助向日葵和todesk&#xff0c;但是有时候很不稳定&#xff0c;而且不开会员&#xff0c;画面不清晰。 现在我学会了怎么用电脑自带的远程桌面软件来异地远程电脑&#xff0c; 主要工具是Tailscale&#xff0c;可以帮我们异地组成虚拟局…

线上剧本杀小程序发展趋势如何?

随着几年的快速发展&#xff0c;剧本杀行业进入到了大众的视野&#xff0c;不过从2022年开始&#xff0c;行业就开始处于下滑趋势&#xff0c;但是行业反而变得更加的规范化。 经历过下滑发展后&#xff0c;剧本杀行业已经趋向专业化、精品化发展&#xff0c;行业正在复苏&…

李彦宏:开源模型会越来越落后

李彦宏&#xff1a;开源模型会越来越落后 昨天听完的李总讲座 大家以前用开源觉得开源便宜&#xff0c;其实在大模型场景下&#xff0c;开源是最贵的。所以&#xff0c;开源模型会越来越落后。 ——李彦宏 至于开源还是闭源&#xff0c;这和企业的利益息息相关。 随着科技的迅猛…

pymavlink 解析自定义mavlink消息。

1.下载mavlink_master包&#xff0c;用于将xml 文件生成对应的py文件。地址是 https://codeload.github.com/mavlink/mavlink/zip/refs/heads/master 进入目录运行python .\mavgenerate.py 呈现gui程序 2.根据发送端的消息定义格式修改接收解析段的pymavlink有关库。 可修改……