Java实现动态代理

深入理解Java动态代理与代码模拟JDK实现动态代理【JAVA核心】 前言文章目录如下,便于快速索引一、什么叫代理?二、什么叫动态代理?三、动态代理有什么优势?四、动态代理的JDK实现原理    4.1核心类/接口    4.2 代理类$Proxy0解析    4.3 动态代理的经典使用五、手写代码模拟JDK动态代理六、参考资料项目源码已经上传,欢迎点击下载~先将自己总结的Java动态代理UML图放在前面,用相同的颜色代表同一个或本质上相同的类与方法,便于大家理解。... 阅读详情

注意点:UserDao userDao = (UserDao) hello.createProxyInstance(new UserDaoImpl());中接收的userDao 必须是接口,如果是类,会报类型转换错误:Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to proxy.UserDao

具体实现:

package proxy;

public interface UserDao {
	void addUser();
}
package proxy;

public class UserDaoImpl implements UserDao {
	@Override
	public void addUser() {
		User user = new User();
		user.setId(1);
		user.setUsername("zhangsan");
		user.setPassword("123456");
	}
	
}
package proxy;

public class User {
	private int id;
	private String username;
	private String password;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	
}
package proxy;

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

public class HelloInvocationHandler implements InvocationHandler {
	private Object targetObject;
	
	public Object createProxyInstance(Object targetObject) {
		this.targetObject = targetObject;
		return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this);
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		helloWorld();
		Object object = method.invoke(targetObject, args);
		return object;
	}
	
	public void helloWorld() {
		System.out.println("Hello world HelloInvocationHandler111");
	}

}

main方法:

package proxy;

public class Demo {
	public static void main(String[] args) {
		HelloInvocationHandler hello = new HelloInvocationHandler();
		UserDao userDao = (UserDao) hello.createProxyInstance(new UserDaoImpl());
		userDao.addUser();
	}
}

关键是实现InvocationHandler接口。

Java动态代理两种实现方式 Java实现动态代理的两种方式。 相对来说cglib更加方便。可以实现为实现接口的类(非final类) 立即下载

相关推荐

COMSOL仿真教程—激光烧蚀

本例使用二维模型,将来自激光的入射热通量模拟为金属表面上空间分布的热源,从而得到金属的烧蚀过程和瞬态温度分布。

qq_40977332的博客 2万+

java 代理(静态代理、动态代理的不同实现)详解及示例

代理模式上,基本上有Subject角色,RealSubject角色,Proxy角色。Subject角色负责定义RealSubject和Proxy角色应该实现的接口;RealSubject角色用来真正完成业务服务功能;Proxy角色负责将自身的Request请求,调用realsubject 对应的request功能来实现业务功能,自己不真正做业务。代理对象和被代理对象一般实现相同的接口,调用者与代理对象进行交互。代理的存在对于调用者来说是透明的,调用者看到的只是接口。

alanchanchn的专栏 8万+

一文告诉你:如何在trae中编译运行GD32程序,并让AI帮你修改代码

本文详细介绍了如何将GD32程序如何用官方固件库构建出来,然后从Keil迁移到国产免费工具Trae,并利用AI进行代码修改的全过程。

水滴爬呀爬 2661

代理——java实现

对java的三种代理模式的总结

2201_75353421的博客 653

解决nfs挂载根文件系统报错:VFS: Unable to mount root fs via NFS, trying floppy.

解决nfs挂载根文件系统报错的问题:VFS: Unable to mount root fs via NFS, trying floppy.

汉尼拔勇闯天涯 4574

三菱 FX5U PLC 4轴程序 控制松下伺服3个, 步进电机一个

三菱 FX5U PLC 4轴程序。 控制松下伺服3个, 步进电机一个, 四轴自动堆垛码垛设备程序, 回原点动作用专用的原点回归指令写的, 手动运行用三菱相对定位指令写的 , 自动运行用绝对定位指令写的取料运行, 表格定位写的自动放料运行, 设备各种报警异常都有写出 程序每一步都有注释。 包括PLC程序、显控触摸屏 程序、松下伺服驱动器接线图。 程序内都有IO注释 编号:4816635519484681汇美0808 ...

m0_68069172的博客 3381

java代理模式的三种实现方式

代理模式含义 即通过一个代理对象来扩展目标对象,实现在不改变目标对象的基础上,为目标对象添加新的功能。同时,还防止了修改原有代码造成的不必要的bug。   假如我们现在有一个接口(MyInterface) public interface MyInterface { void doSomeThing(); void saySomeThing(); String eat...

maybe的博客 1075

Comsol超声空化气泡仿真:从基础理论到工业应用实践

本文详细介绍了Comsol超声空化气泡仿真的基础理论及工业应用实践。通过解析超声空化现象、Comsol模型搭建流程及求解器优化技巧,帮助工程师掌握气泡仿真技术,提升超声波清洗和乳液制备等工业应用的效率与质量。

weixin_27966471的博客 252

Java代理模式的实现详解

本文章是在学习mybatis框架源码的过程中,发现对于动态代理Mapper接口这一块的代理实现还是有些遗忘和陌生,因此在本文章中就Java实现代理模式的过程进行一个学习和总结。代理模式(Proxy Pattern)定义:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英文叫做Proxy或Surrogate,它是一种对象结构型模式。

Bananaaay的博客 2260

YOLOv8安防监控实战:跌倒/闯入/徘徊实时检测(附TensorRT加速+声光报警部署代码)

精准性:针对跌倒/闯入/徘徊的行为特征优化,准确率达89.3%,误报率低于5次/天;实时性:TensorRT加速到50+FPS,报警延迟<1秒,满足安防“黄金响应时间”;低成本:无需专用AI芯片,RTX 3060或Jetson Orin就能跑,硬件成本比传统方案低60%;易部署:代码全开源,提供从模型训练到硬件联动的完整流程,2天即可搭起原型系统。如果你的安防监控还在“漏报误报”“响应慢”,建议先从跌倒检测的姿态过滤改起——用100张样本测试,再集成TensorRT加速,90%能看到明显改善。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 680

作物生长模型Oryza V3实战1:为什么要研究它

ORYZAV3是水稻生长模拟模型ORYZA2000的最新升级版本(3.5版),作为作物生长模型,它通过数学方法和计算机技术模拟水稻生长发育过程及其与环境条件的相互作用。主要功能包括:模拟不同条件下的水稻生长和产量形成、评估环境胁迫影响、分析土壤碳氮动态以及进行区域尺度模拟。国内应用广泛,科研机构用于气候变化影响评估、灌溉模式比较等研究,并开展参数敏感性分析和应用培训。使用流程分为六个步骤:确定输入参数(气象、土壤、作物三类)、参数校准、设置模拟环境、运行模型、分析结果(输出50个参数)和计算产量(穗干重×收

504

Java中代理的实现方式

在Java中,有多种方式可以实现代理,包括:invoke()invoke()Enhancer这些代理方式各有特点,可以根据具体需求选择适合的方式。静态代理相对简单,但需要为每个目标类编写一个代理类;JDK动态代理适用于基于接口的代理;CGLIB动态代理适用于没有实现接口的类的代理。

ttyy1112的专栏 770

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java动态代理实现

转载:https://www.cnblogs.com/xifengxiaoma/p/9371771.html 目录  一、代理模式 二、静态代理 三、动态代理 关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理。  一、代理模式    代理模式是常用的java设计模式,他的特征是代理类与委托类...

weixin_40663800的博客 7944

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java动态代理为什么要求必须实现顶级接口

前言 如果你学习过spring,那么你一定接触和使用过Aop。大家都知道Spring的Aop是采用动态代理方式实现的。而在Spring的Aop中使用的动态代理通常有两种: java原生的动态代理 cglib的动态代理 我们都学习过这两种代理方式的区别。java原生的动态代理所代理的对象必须要实现一个顶级接口,而cglib的动态代理则不需要这样的接口。在很长一段时间里很迷惑为什么java的动态代...

qq_22933035的博客 3854

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java中如何实现动态代理

Java中通过反射实现动态代理

m0_66605858的博客 1285

Java动态代理实现

在目前的Java开发包中包含了对动态代理的支持,但是其实现只支持对接口的的实现。其实现主要通过是java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现,如下,HelloWorld接口定义的业务方法,HelloWorldImpl

张龙(风中叶)的专栏 4307

Java JDK 动态代理(AOP)使用及实现原理分析

代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息 ​ 一、什么是代理? 二、Java 动态代理类 三、JDK的动态代理怎么使用? 四、动态代理怎么实现的? 五、结论 一、什么是代理? 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。 代理模式UML图: 简单结构示意图: 为了保持行为的...

勿忘初心 16万+

Java的动态代理如何实现?

CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。因为使用动态代理可以很方便的运行期生成代理类,通过代理类可以做很多事情,比如AOP,比如过滤器、拦截器等。在我们平时使用的框架中,像servlet的filter、包括spring提供的aop以及struts2的拦截器都使用了动态代理功能。反射是动态代理的实现方式之一。

sinat_53467514的博客 711

java 动态代理实现原理

上篇讲了:java动态代理浅析  这篇讲讲其内部实现原理。 1、相关的类和接口 1.1 java.lang.reflect.Proxy 这是 Java 动态代理机制的主类,它提供了一组静态方法来为一组接口动态地生成代理类及其对象。 Proxy 的静态方法: // 方法 1: 该方法用于获取指定代理对象所关联的调用处理器 static InvocationHandler

爱上在路上 3511

Java动态代理代码实现

Java动态代理1、不使用代理的写法2、jdk动态代理3、CGLib动态代理 1、不使用代理的写法 package com.springbasic.proxy; ​ public class ServiceDemo { ​ public void service() { // 性能监控 System.out.println("开始监控"); long start = System.currentTimeMillis(); ​ Syste

willbkimps的博客 1063

Java中动态代理的实现方式

动态代理(Dynamic Proxy)是一种在运行时创建代理对象的机制,它允许我们在不事先知道具体类型的情况下,通过代理对象来调用目标对象的方法。动态代理通常使用在面向对象编程中的AOP(面向切面编程)中,用于在目标对象的方法执行前后,添加一些额外的逻辑(如日志记录、性能监控、事务管理等),而不需要修改目标对象的源代码。

qq_39939541的博客 2036

Java如何实现动态代理?

1.JDK动态代理• 只能代理接口。• 无需第三方库,JDK原生支持。• 实现简单,性能较高。2.CGLIB动态代理• 可以代理类和接口。• 需要引入第三方库(CGLIB)。• 实现稍复杂,性能稍低(因为生成子类并重写方法)。通过这两种方式,可以在运行时动态生成代理对象,从而实现方法调用的拦截、增强等功能,广泛用于AOP(面向切面编程)等场景。

zhzjn的博客 1081

什么是Java动态代理,如何实现一个动态代理例子

Java动态代理 一、概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品。关于微商代理,首先我们从他们那里买东西时通常不知道背后的厂家究竟是谁,也就是说,“委托者”对我们来说是不可见的;其次,微商代理主要以朋友圈的人为目标客户,这就相当于为厂家做了一次对客户群体的“过滤”。我们把微商代理和厂家进一步抽象,前者可抽象为代理类,后者可抽象为委...

u013452337的博客 4395

Java动态代理的实现方式

代理模式是一种设计模式,,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,。代理分为动态代理和静态代理。举例:通过中介进行的商品交易,中介就是代理,代替卖方进行商品销售。静态代理比较麻烦,需要对每个目标对象都设置专用的代理类,实际开发中很少使用。动态代理是的一种技术。**从 JVM 角度来说,动态代理是在运行时动态生成类字节码,并加载到 JVM 中的。

Mr_Richard的博客 1896

java的动态代理如何实现

JDK 的动态代理和 CGLIB 都有各自的优点和缺点,具体使用哪种方式取决于具体的需求和场景。如果被代理的类已经实现了接口,那么可以优先考虑使用 JDK 的动态代理;如果被代理的类没有实现接口,或者需要对类的所有方法进行代理,那么可以考虑使用 CGLIB。

蒾酒的博客 1507
上一篇: JAVA实现IP排序
下一篇: JAVA ttf字体转化为Font
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值