Java动态代理实现案例

Java动态代理简介(含示例) Java动态代理技术是一种在运行时动态生成代理类的技术。它可以在不修改源代码的情况下,对目标对象进行拦截和增强,实现AOP编程。在这些场景中,我们可以通过动态代理技术,在不修改源代码的情况下,对目标对象进行拦截和增强,实现AOP编程。方法动态生成代理对象,并将真正的业务对象传入代理对象中。当客户端调用代理对象的方法时,代理对象会调用。方法,在该方法中对目标对象进行拦截和增强。 阅读详情

通过动态代理,在不改变对象的方法的情况下对方法进行增强。动态代理由被代理对象和代理对象租场,被代理对象时真实的对象,代理对象是在内存中的一个对象。使用动态代理时,代理对象与被代理对象要实现相同的接口。通过Proxy.newProxyInstance()实现动态代理。

newProxyInstance()方法需要传入三个实参,分别是类加载器、接口类型的数组、代理规则
在这里插入图片描述

  • 案例测试
  1. 先创建Person类和接口,实现两个方法:getName()和getAge()。然后通过动态代理改变getAge方法。
public class Person implements PersonInterface {
    @Override
    public void printName(String name) {
        System.out.println("My name is " + name);
    }

    @Override
    public void printAge() {
        System.out.println("My age is 25");
    }
}
public interface PersonInterface {
    void printName(String name);
    void printAge();
}
  1. 创建测试类,在其中进行动态代理实现:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyTest {
    public static void main(String[] args) {
        Person person = new Person();
        //类加载器:与被代理对象使用相同的类加载器
        //接口类型的class数组:与被代理对象使用相同的接口
        //代理规则:完成需要增强的功能
        PersonInterface proxy = (PersonInterface) Proxy.newProxyInstance(
                person.getClass().getClassLoader(),
                new Class[]{PersonInterface.class},
                new InvocationHandler() {
                    //执行Person类中的所有方法都会经过invoke方法
                    //Method为 Person类中的所有方法封装起来的对象,需要对method方法进行操作,实现功能增强
                    //Object[] 为调用Person类的方法时传递的实参
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        if(method.getName().equals("printAge")){
                            System.out.println("当前执行动态代理扩展功能...");
                        }else{
                            return method.invoke(person, args);
                        }
                        return null;
                    }
                });
        proxy.printName("wzh");
        proxy.printAge();
    }
}
  1. 最终被代理的方法getAge()将输出如下:
    在这里插入图片描述
Java 动态代理都不懂怎么装逼? 由浅入深,一步一步理解动态代理 阅读详情

相关推荐

VirtualBox虚拟机上ubuntu系统安装问题记:显示画面太小、启动就异常退出等

报错:Failed to load R0 module D:/VMMR0.r0: The path is not clean of leading double slashes: ‘D:/VMMR0.r0’ (VERR_SUPLIB_PATH_NOT_CLEAN).解决方法特别简单,就是安装VIrtualBox的时候不要安装在CDE等盘根目录下。首先VirtualBox的下载安装过程是比较简单的,此处就不赘述了。然后E盘下新建个目录,安装到这个目录下就可解决。

qq_42595610的博客 2825

JAVA基础--动态代理案例

2、proxyMethod.invoke方法是调用被代理对象(父类)方法,所以入参只能传入 target;3、proxyMethod.invokeSuper方法是调用 代理对象的 方法,入参只能传入 obj;1、cglib可以理解为继承子类的方式创建动态代理,那么我们可以理解为 target 是父类,obj 是动态代理生成的子类。//代理类 实现需要实现InvocationHandler接口,重写invoke方法 传入业务实现类对象。// 通过CGLIB动态代理获取代理对象的过程。

weixin_44562489的博客 380

问题:dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)

 1. 问题:Ubuntu安装软件的过程中出现依赖项的问题 “E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).” 按照指示执行如下两条命令都没有解决问题。 sudo apt-get -f install sudo apt-get --fix-broken ...

gloria_littlechi的博客 2万+

Java动态代理及其应用案例

Java动态代理是一种很有用的技术,它可以很方便地实现AOP编程、RPC框架、单元测试等功能。在使用Java动态代理时,我们需要注意被代理对象必须实现一个接口,同时需要编写一个实现了接口的代理处理器类。通过动态地生成代理类,并将其绑定到被代理对象上,我们就可以很方便地实现方法的增强、远程方法调用等功能。

m0_65731386的博客 653

Ubuntu20.04下运行VINS系列:VINS-Mono、VINS-Fusion和GVINS

安装好了VINS-Mono所需的ROS noetic、Eigen3.4.0、Ceres2.10和OpenCV4.2.0等。VINS-Mono是在ROS melodic以及Ceres1的环境下开发的,因此需要适配高版本的环境。

zardforever123的博客 2万+

交通流预测爬坑记(一):交通流数据集,原始数据

常用的交通流数据集,持续更新~~

K_first的博客 4万+

Java动态代理的常用场景及示例

Java的动态代理在很多场景中都有广泛的应用。以下是几个常见的使用场景及相应的案例:**more。

maxiaoteng的博客 1469

“华为杯”研究生数学建模竞赛2020年-【华为杯】B题:汽油辛烷值优化建模(附优秀论文)

摘 要:本文通过机器学习算法和数据挖掘技术,建立了汽油辛烷值(RON)损失的预测模型,在保证汽油产品脱硫效果的前提下,以降低汽油辛烷值损失在30%以上为目标,给出每个样本的优化操作条件。针对第一问,对285号和313号原始数据用给定的数据处理规范进行预处理,对每一列变量求期望,得到最终的数据补充到相应的样本编号。针对第二问,首先对数据样本按照最大最小限幅以及拉依达法则进行列变量清洗,通过两轮特征筛选确定变量:结合处理后的数据,针对产品中硫含量、RON损失值用。

getusushu的博客 1251

Java的动态代理(实际案例秒懂!)

在看动态代理解决两个案例之前,请先看链接VCR《java代理》2分钟动画_哔哩哔哩_bilibili需求分析就是定义一个接口,然后实现类去实现规定的run方法缺点:代码很冗余,有一些运行前和运行后的代码都给了实现类,难以管理 使用动态代理,利用反射机制,根据方法决定调用哪个对象的方法添加VehicleProxyProvider类 测试方法: 以及真正的运行结果: 可以自己去debug一下这个代码。需求分析 定义接口: 传统的实现子类 结果: MyProxyProvider

m0_74301606的博客 781

PointNet++改进策略目录

后续我将如何使用文章中创新点加入的PointNet++中代码实现部分进行更新。

u012901740的博客 2195

【Claude Code 源码解析教程】第25章:测试与调试

Claude Code 作为复杂的 AI 编程助手,测试与调试是保证质量的关键环节。项目建立了完善的测试体系,包括单元测试、集成测试、端到端测试等多个层次,同时提供了丰富的调试工具和技巧。

rengang66的博客 210

java动态代理实现案例

一、jdk动态代理案例 public class JdkProxy implements InvocationHandler { public Object object; public JdkProxy(Object object){ this.object=object; } @Override public Object invok...

hq.zheng的博客 1053

Nuxt - 项目打包部署及上线到服务器流程(SSR 服务端渲染)

Nuxt-项目打包部署及上线到服务器流程,详细介绍Nuxt项目上线部署,服务端渲染(ssr)项目及nuxt项目部署过程,nuxt项目打包上线,Nuxt项目的部署教程,NuxtJS项目部署方案,Nuxt如何部署到线上,nuxt项目部署篇,Nuxt项目搭建到Nuxt项目部署,Nuxt项目从开始到部署,详细教程。服务器部署nuxt项目,nuxt服务端部署上线,在服务器上部署nuxt项目,NuxtJS项目——命令和部署。......

🏆 前端领域优质创作者 1万+

Java动态代理代码案例:使用cglib实现对无接口的类进行动态代理

学亮编程手记 859

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java中的动态代理实现案例

动态代理是Java中一种强大的设计模式实现,用于在不侵入源码的情况下,对方法进行增强。实现方式主要有两种:JDK动态代理:用于目标类有接口的场景。CGLIB动态代理:用于目标类无接口的场景(Spring框架在目标无接口时会默认使用CGLIB)。对于大多数应用,特别是使用了Spring框架的项目,更多是使用这些机制(如@Cacheable),而不需要直接编写代理代码。

qq_45626589的博客 362

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java实现AOP动态代理的小案例

实现动态代理的步骤: 1. 创建接口,定义目标类要完成的功能 这里定义一个卖Usb的接口 //目标接口 public interface UsbSell { float sell(int amount); } 2. 创建目标类实现接口 这里定义一个UsbKingFactory类来实现接口,金士顿厂家 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; //必须实现InvocationHan

a1272159758的博客 409

Java 动态代理案例实现

Java 动态代理案例实现

cfqp123456的博客 310

Java设计模式之JDK动态代理和CGLib动态代理的实现案例

接口设计: public interface UserService { public void getUser(); } 接口实现类: public class UserServiceImpl implements UserService{ public void getUser() { System.out.println(1); ...

月光秦城 381

java代理模式,静态/动态代理,简单案例实现--柚子真好吃

java代理模式,静态/动态代理,简单案例实现--柚子真好吃一、代理模式简单介绍二、业务介绍三、静态代理四、动态代理 一、代理模式简单介绍 代理模式其实就是一个中间人/中间商执行业务的过程 代理模式是一种结构型模式 代理模式为其他对象提供一种代理以控制对这个对象的访问 二、业务介绍 人物介绍: 孙小币:公司职员,每日操劳,想寻求刺激。 条哥:专业按摩师。 宫燕遵:中间商。 宫燕军:宫燕遵的哥哥,同样是中间商。 业务流程: 一日,孙小币由于工作特别劳累,故想找专业人员上门服务,但其并不认识条哥。此时孙

java 212

详解 java中 动态代理的两种实现方式(具体案例分析)

目录一. 简介二. 基于接口的动态代理核心:案例分析:案例的理解:三. 基于子类的动态代理核心:案例分析:案例的理解:四. 总结: 一. 简介 代理这种模式其实就是在不改变目标对象方法的情况下对方法进行增强   本文将从基于接口以及基于子类的方式来讲解动态代理 二. 基于接口的动态代理 核心:   JDK官方提供的Proxy类中的newProxyInstance方法 案例分析: 这就是需要方...

qq_44716086的博客 748

查漏补缺(java篇——反射的案例以及动态代理的实现)

不要忘记前面学习的知识点,查漏补缺

weixin_43808721的博客 305

Java动态代理使用(基于JDK的动态代理)

通俗点说:动态代理就是创建一个代理类,在代理类中调用被代理方法,并且在代理类进行一些加强操作。举个例子:你的电脑桌上有显示器、键盘和鼠标。你想让你的电脑桌看起来好看一些,但是不想动原有的东西,你可以在桌面新添加摆件、氛围灯等等,这样就可以在不更改原有布局的情况下进行修饰桌面。

m0_50123956的博客 417

Java动态代理一——动态类Proxy的使用

1.什么是动态代理? 答:动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实。代理一般会实现它所表示的实际对象的接口。代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际功能,代理对象对客户隐藏了实际对象。客户不知道它是与代理打交道还是与实际对象打交道。 2.为什么使用动态代理? 答:因为动态代理可以对请求进行任何处理 3.使用它有哪些好处? 答

kissing7的专栏 538

jdk动态代理demo

jdk动态代理demo案例

qq_45938780的博客 390

【动态代理】Java“动态代理”入门案例

在 Java 中,动态代理是一种设计模式,它允许在运行时动态地创建代理类,并且可以为目标对象提供代理功能。通过动态代理,你可以在不修改原始类代码的情况下,为其添加额外的功能,比如日志记录、事务管理、权限控制等。动态代理通常用于一些面向切面编程(AOP)的框架中,如 Spring AOP,或用于接口的代理化。

slj18633752884的博客 323
上一篇: (三)JDBC学习笔记——抽取JDBC工具类、解决SQL注入、事务管理
下一篇: (四)JDBC学习笔记——使用装饰器模式、适配器模式、动态代理模式自定义数据库连接池
MegaBytes
博客等级 码龄8年 45粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值