Spring 静态代理和动态代理(继承和CGLIB库)

浅谈Spring中JDK动态代理和CGLIB动态代理 阅读详情

静态代理

public class Person {

	public void eat(String name,String food){
		System.out.println(name+"正在吃"+food+"!");
	}
}

public class PersonProxy extends Person {

	@Override
	public void eat(String name, String food) {
		System.out.println(name+"请先洗手!");
		super.eat(name, food);
		
		System.out.println("出门别忘带纸,防止拉肚子!");
	}
}

测试类

public class TestPersonDaoDemo01 {

	public static void main(String[] args) {
		
		
		PersonProxy personProxy=new PersonProxy();
		personProxy.eat("小明", "瓜");

	}

}

CGLIB库动态代理
需要jar包spring-core-4.1.0.RC1.jar

public  class Calculator {

	public   int add(int num1,int num2){
		return num1+num2;
	}
}

public class Person {

	public void eat(String name,String food){
		System.out.println(name+"正在吃"+food+"!");
	}
}

代理工厂

public class ProxyFactory implements MethodInterceptor {

	private Object target;
	
	/**
	 * 根据传递的目标对象得到代理对象
	 * @param target
	 * @return
	 */
	public Object newProxyObject(Object target){
		this.target=target;
		//实例化用于生成代理对象的对象
		Enhancer enhancer=new Enhancer();
		//设置代理对象的父类对象的类模板对象
		enhancer.setSuperclass(target.getClass());
		//设置调用目标对象方法时关联的回调接口对象
		enhancer.setCallback(this);
		
		//调用enhancer的create()方法用于生成代理对象
		Object proxy=enhancer.create();
		return proxy;
	}
	
	/**
	 * 
	 */
	@Override
	public Object intercept(Object proxy, Method method, Object[] args,
			MethodProxy methodProxy) throws Throwable {
		System.out.println("数据校验");
		Object returnValue=methodProxy.invoke(target, args);//调用目标对象的方法
		System.out.println("returnValue="+returnValue);
		System.out.println("日志记录");
		return returnValue;
	}

	
}

测试类

public class TestPersonDaoDemo01 {

	public static void main(String[] args) {
		
		
		
		/*//实例化代理工厂对象
		ProxyFactory proxyFactory=new ProxyFactory();
		//声明并实例化目标对象
		Person person=new Person();
		//通过给定目标对象生成代理对象
		Person personProxy=(Person) proxyFactory.newProxyObject(person);
		personProxy.eat("小明", "吃瓜");*/
		
		
		
		ProxyFactory proxyFactory=new ProxyFactory();
		Calculator calculator=(Calculator) proxyFactory.newProxyObject(new Calculator());
		int sum=calculator.add(5,4);
		System.out.println("sum="+sum);
		
	
	}

}

全网详细解决Client does not support authentication protocol requested by server;consider upgrading Mysql c 全网详细解决1251 - Client does not support authentication protocol requested by server; consider upgrading Mysql client。 阅读详情

相关推荐

基于yolo11的BGA图像目标检测

15.YOLOv8的n/s版本(如YOLOv8n-1280),或通过TensorRT量化压缩模型。3.使用自适应batch_size(如根据GPU显存动态调整),推荐16-32。为采集分辨率整数倍(如原图2592×1944,训练时缩放为640×480),保持宽高比。14.采用余弦退火学习率(cos_lr)和早停(patience=50),防止过拟合。1.模型标注后,少量标注全部人工校验,大量数据抽检,部分人工检验。13.部署模型后持续收集困难样本(如模棱两可的预测结果),定期迭代更新模型。

qq_47798402的博客 1205

JAVA-静态、继承、多态

java学习笔记003

m0_58285786的博客 256

AI 生成 CAN 通信测试用例实战

本文分享了AI辅助汽车电子测试用例编写的实战经验。通过某车企CAN网络测试项目案例,对比传统方式(需27天)与AI辅助方式(仅5天)的效率差异,展示81%的效率提升。文章详细介绍了从DBC文件提取信号信息的方法,包括DBC文件结构解析、信号定义说明,并提供了完整的Python解析脚本代码,可将信号信息导出为JSON或Excel格式,为后续AI批量生成测试用例奠定基础。

小明的博客 691

[C++] 类的继承

类的继承

airaou 1152

别再死记公式了!用HFSS/CST手把手教你仿真一个2.4GHz WiFi的PIFA天线(附参数调试技巧)

本文详细介绍了使用HFSS和CST仿真软件设计2.4GHz WiFi PIFA天线的全流程,包括建模准备、分步操作指南和参数调试技巧。通过可视化结果和实战案例,帮助工程师快速掌握天线设计的关键参数优化方法,提升辐射性能和工作效率。

weixin_31682031的博客 331

环境配置与基础教程:2026大厂标准:使用 DVC (Data Version Control) 实现 YOLO 数据集版本控制全链路管理

本文介绍了使用DVC 3.0对YOLO数据集进行全链路版本控制的方法。主要内容包括: DVC 3.0的核心增强:内容块级缓存去重、并行云传输、AI智能体元数据跟踪等新特性,可显著提升YOLO数据集管理效率。 环境配置:详细说明DVC 3.0的安装步骤、项目初始化方法以及远程存储配置方案(支持S3、GCS、Azure等多种存储后端)。 目录结构规范:提供符合大厂MLOps标准的项目目录结构设计。 实战操作: 原始数据版本化 多格式标注数据版本控制 版本切换方法 优势说明:DVC通过哈希指针机制管理大型数据集,

ZXSXJ的博客 148

【C++】类继承(基类、公有继承、静态联编、动态联编、访问控制)

类继承: 通过继承完成的工作:可在已有类的基础上添加功能;可以给类添加数据;可以修改类方法的行为。 其中derived是派生类,base是基类,x和y是基类构造函数使用的变量。 4. 基类指针可以在不进行显式类型转换的情况下指向派生类对象;基类引用可以在不进行显式类型转换的情况下引用派生类对象。通常,C++要求引用和指针类型与赋给的类型匹配,但这一规则对继承来说时例外。这种例外只是单向的,不可以将基类对象和地址赋给派生类引用和指针。将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编。在编译过程中

小米子的成长日记 559

Python+OpenCV实现车牌检测与识别

使用Python+OpenCv实现车牌检测与识别,算法思想来自于网上资源,先使用图像边缘和车牌颜色定位车牌,再识别字符。车牌定位在预测方法中,为说明清楚,完成代码和测试后,加了很多注释,请参看源码。车牌字符识别也在预测方法中,请参看源码中的注释,需要说明的是,车牌字符识别使用的算法是OpenCv的SVM,OpenCv的SVM使用代码来自于OpenCv附带的样本。由于训练样本有限,你测试时会发现,车...

不脱发的程序猿 1万+

spring aop学习7:Cglib动态代理(基于继承代理)

一.cglib东动态代理 1.通过net.sf.cglib.proxy.Enhancer动态生成代理对象 2.需要实现net.sf.cglib.proxy.MethodInterceptor接口二.上代码 1.需要导入的jar包:asm-2.2.3.jar和cglib-nodep-3.2.5.jar 2.目标类:TargetObject.javapackage com.tiglle.cgli

Tiglle的博客 808

[VCS]VCS dump fsdb的精细化控制

本文介绍了VCS FSDB波形dump的精细化控制方法。主要内容包括:1)基本dump方式;2)通过$fsdbDumpoff排除特定层次;3)使用$fsdbDumpvars选择性dump指定模块;4)运行时动态控制dump开关;5)通过文件管理排除列表($fsdbDumpoffFile或自定义读取);6)层次控制策略(剪除整棵树或仅当前层)。这些方法可有效控制波形文件大小,提高仿真效率。

元直的博客 1033

PINNACLE:PINN自适应配点与实验点选择算法

PINNACLE算法通过引入动态权重机制,实现了PINN训练点选择的自适应优化。该算法基于对训练过程中不同区域学习需求变化的深入理解,设计了平滑过渡的权重函数,确保了模型在不同训练阶段能够优先学习最需要的区域。理论分析和实验结果均表明,PINNACLE不仅能够保证收敛性,而且能够显著提高PINN的性能。这一算法为物理信息神经网络的应用提供了重要支持,尤其适用于复杂PDE问题的求解。

VectorShift的博客 1136

Spring动态代理的两种方式

第一种方式:利用JDK的反射机制(proxyJDK) package cn.xhx.jdkproxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** * 此拦截器为PersonDao加强功能(添加事务) * @author LenovoY510P * */ public

xhxxx 1万+

零基础学习CANoe Panel(17)—— Panel CAPL Function

CANoe内置了几个CAPLFunction,允许我们在CAPL运行时动态的更改Panel控件的属性,比如打开某个panel,禁用某个控件,更改控件颜色等。

蚂蚁小兵 3508

代理模式(Proxy Pattern)

基于字节码可以实现更强大的功能,这里我们只聚焦于代理模式。可以看到Java的代理模式实现有多种方式,spring即支持JDK实现的动态代理,也支持cglib实现的动态代理,基于代理模式实现的AOP是spring的核心功能之一。灵活的运用代理模式可以让我们更加游刃有余的完成的复杂功能。

一斗水的专栏 180

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JDK动态代理、Cglib动态代理及Spring AOP

Java中的JDK动态代理是一种通过反射机制生成代理对象的技术,使得我们能够在运行时动态地创建某个接口的代理类,而无需手动编写实现类。JDK动态代理通常用于横切关注点(如日志、事务管理、安全性等)在方法调用前后进行处理,而不需要修改目标类的源代码。

意疏的博客 6385

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

cglib动态代理和jdk动态代理的区别与应用

 1,引入如果从一个Controller调用Service的非事务方法a,然后在a里调用事务方法b,b事务生效吗? public void update() { updateActual(); int a = 1 / 0; } @Transactional public void updateActual() { WithHo...

一个想写小说的程序员 4万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

聊聊JDK动态代理和CGlib动态代理,AOP代理机制是怎么回事?代理模式详解

摘要: 代理模式通过引入代理对象间接访问目标对象,控制访问并扩展功能。分为静态代理(手动增强方法,灵活性差)和动态代理(运行时生成代理类)。静态代理需为每个目标类单独创建代理类,动态代理则更灵活,包括JDK动态代理(基于接口)和CGLIB动态代理(直接代理类)。示例展示了静态代理的实现步骤,动态代理通过运行时动态生成字节码实现高效扩展。

先做到 再看见 2071

浅谈Spring中JDK动态代理与CGLIB动态代理

代理模式 代理模式:代理类和被代理类实现共同的接口(或继承),代理类中存有指向被代理类的索引,实际执行时通过调用代理类的方法、实际执行的是被代理类的方法。 JDK代理和CGLIB代理差异 实现差异: - cglib的proxy要求代理对象不能被final修饰,因为其原理是继承代理对象生成子类 - jdk的proxy要求代理对象必须实现一个或多个接口...

wangzhihao的博客 1万+

jdk动态代理和CGLIB动态代理的区别

一、原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。 而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3、如果目...

芒果哥的专栏 9359

Spring的静态代理与动态代理

简述 AOP是可以横向扩展功能的,能够在不修改原来代码的前提下实现功能扩展,AOP的实现原理即是动态代理+反射。 为什么要使用代理 1.什么是代理   代理即是将被代理对象进一步封装后,隐藏被代理对象,在不修改被代理对象代码的前提下完成一些额外的处理。 2.场景描述   有一个BookService类,其中有一个add方法,现在想在执行hello方法之前打印一句话,例如是打印”...

至尊宝 2万+

JDK动态代理和CGLIB静态代理

不管是JDK,spring框架,还是日常的开发中几乎可以说无处不在,下面一张简图描述了代理这个模式的业务场景,有过一些开发经验的同学对这张图应该不难理解;

coderrrrrr的博客 983

Spring事务与JDK/CGLIB动态代理

近日面试问及AOP和动态代理,再之后的事务方面有所生疏,感谢面试官特意给我介绍了下,一个之前的知识盲区。 首先Spring事务在开发过程中是通过@Transactional注解来控制。 1. Transactional注解的原理 对于使用了Transactional注解的方法的类,Spring AOP代理会在运行时生成这个类的代理对象。 当这个对象运行这个注解方法时,会读取@Transa...

liyifan687的博客 3987

Spring AOP底层实现- JDK动态代理和CGLIB动态代理

Spring AOP是运行时织入的,那么运行时织入到底是怎么实现的呢?答案就是代理对象。 代理又可以分为静态代理和动态代理。 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 动态代理:在程序运行时,运用反射机制动态创建而成。 静态代理的每一个代理类只能为一个接口服务,这样一来程序开发中必然会产生过多的代理,而且...

JavaLab 7015

Java静态代理和动态代理

代理模式是一种结构性模式。代理模式为一个对象提供了一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。静态代理是定义父类或者接口,然后被代理对象(即目标对象)与代理对象一起实现相同的接口或者继承相同的父类。代理对象与目标对象实现相同的接口,然后通过调用相同的方法来调用目标对象的方法。职责清晰,符合单一职责原则。

qq_43070052的博客 1218

jdk动态代理和cglib动态代理详解

本文内容概括: 静态代理概述 基于继承方式实现静态代理 基于聚合方式实现静态代理 jdk动态代理实现 如何实现一个HashMap的动态代理类 cglib动态代理实现 jdk和cglib代理的区别 动态代理和静态代理的区别 spring如何选择jdk和cglib代理 如上图,代理模式可分为动态代理和静态代理,我们比较常用的有动态代理中的jdk动态代理和Cglib代理,像spr...

分享传递价值 9992
上一篇: Spring 静态代理和动态代理(实现接口)
下一篇: 设计模式-装饰者模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值