动态代理的两种实现方式小案例

【论文精度】生成式预训练模型——BART(Bidirectional and Auto-Regressive Transformers) ​ BART是一个预训练的seq2seq的去噪自编码(denoising autoencoder)模型,BART以下方式进行训练①用任意的噪声函数(noising function)去破坏文本;②学习一个模型来重建原始文本。它使用一个标准的基于transformer的神经机器翻译架构,可以看作是BERT(双向编码器)、GPT(left-to-right解码器)以及其他预训练方案的推广。 阅读详情

关于反射和动态代理的使用

动态代理的方式简化业务层的大量重复代码

Interface

package com.xwl;
/**
 * 动态代理
 * @author Administrator
 *
 *我们可以使用动态代理的方式简化销售公司的大量重复代码
 *
 */
//苹果需要生产四种产品 交给中国工厂
interface Iphone{	
	public void product6s();
	public void product6Plus();
	public void product7();
	public void productX();
}

service

//生产厂商生产苹果手机
class Phone implements Iphone{
	public void product6s() {
		System.out.println("6s");
	}
	public void product6Plus() {
		System.out.println("6Plus");
	}
	public void product7() {
		System.out.println("7");
	}
	public void productX() {
		System.out.println("X");
	}
}

业务

//销售公司Agent 宣传  销售
class Agent{
	//首先我需要手机
	private Iphone phone;
	
	public Iphone getPhone() {
		return phone;
	}
	public void setPhone(Iphone phone) {
		this.phone = phone;
	}
	//  **1.宣传 我们 2.生产(phone.product6s()) 3.销售发货**
	public void product6s(){
		System.out.println("宣传");
		phone.product6s();//生产的什么?
		System.out.println("销售和发货");
	}
	// **1.宣传 我们 2.生产(phone.product6Plus()) 3.销售发货**
	public void product6Plus(){
		System.out.println("宣传");
		phone.product6Plus();
		System.out.println("销售和发货");
	}
	// **1.宣传 我们 2.生产(phone.product7()) 3.销售发货**
	public void product7(){
		System.out.println("宣传");
		phone.product7();
		System.out.println("销售和发货");
	}
	// **1.宣传 我们 2.生产(phone.productX()) 3.销售发货**
	public void productX(){
		System.out.println("宣传");
		phone.productX();
		System.out.println("销售和发货");
	}
}
public class Test_fanse {
	public static void main(String[] args) {
		
	}
}
我们可以通过动态代理的方式简化销售公司的任务,动态代理的实现有两种一种是JDK的原生方式,另一种是封装了(字节码处理框架ASM)的CGLIB动态代理实现。

首先我们要细化上面的代码

苹果生产厂商提供的生产苹果手机的接口(规范)
package com.xwl;
public interface PhoneService {
	//苹果生产四种产品 交给中国工厂
		public void product6s();
		public void product6Plus();
		public void product7();
		public void productX();
}
中国富士康给出了实现制造出来实现(实现)
package com.xwl;
public class PhoneServiceImpl implements PhoneService {
		public void product6s() {
			System.out.println("6s");
		}
		public void product6Plus() {
			System.out.println("6Plus");
		}
		public void product7() {
			System.out.println("7");
		}
		public void productX() {
			System.out.println("X");
		}
}
一、JDK实现动态代理(销售公司)

代理对象JdkProxy :

	package com.xwl;
	import java.lang.reflect.InvocationHandler;
	import java.lang.reflect.Method;
	import java.lang.reflect.Proxy;
	public class JdkProxy implements InvocationHandler{
		//要代理的对象
		private Object target;
		public JdkProxy(Object target) {
			super();
			this.target = target;
		}
		public JdkProxy() {
			super();
		}
		//给一个代理对象
		public Object getProxy(){
			 return Proxy.newProxyInstance(Thread.currentThread()
		                .getContextClassLoader(), target.getClass().getInterfaces(),
		                this);
		}
		public Object invoke(Object proxy, Method method, Object[] args)
				throws Throwable {
			System.out.println("宣传");
			Object reslut = method.invoke(target, args);
			System.out.println("销售和发货");
			return reslut;
		}
	}
生产出了一个phone7开始宣传
package com.xwl;
public class TestJdk {
	public static void main(String[] args) {
		PhoneService phoneService = new PhoneServiceImpl();
		JdkProxy jdkProxy = new JdkProxy(phoneService);
		PhoneService proxy = (PhoneService) jdkProxy.getProxy();
		proxy.product7();
	}
}

CGLIB实现动态代理

代理对象CglibProxy :

package com.xwl;	
import java.lang.reflect.Method;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

public class CglibProxy implements MethodInterceptor{
	public Object intercept(Object proxy, Method method, Object[] args,
			MethodProxy methodProxy) throws Throwable {
		System.out.println("宣传");
		Object result = methodProxy.invokeSuper(proxy, args);
		System.out.println("销售和发货");
		return result;
	}
}

生产出来了一个6s开始宣传:

package com.xwl;
import org.springframework.cglib.proxy.Enhancer;
public class TestCglib {
	public static void main(String[] args) {
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(PhoneServiceImpl.class);//继承被代理类
		enhancer.setCallback(new CglibProxy());//设置回调
		PhoneServiceImpl PhoneProxy = (PhoneServiceImpl) enhancer.create();//生成代理对象
		PhoneProxy.product6s();
	}
}
总结

动态代理的好处是什么?
Java动态代理的优势是实现无侵入式的代码扩展,也就是方法的增强;让你可以在不用修改源码的情况下,增强一些方法;在方法的前后你可以做你任何想做的事情(甚至不去执行这个方法就可以)。
动态代理和静态代理的区别?
1.静态代理类:由程序员创建或者由第三方工具生成,再进行编译;在程序运行之前,代理类的.class文件已经存在了。
动态代理类:在程序运行时,通过反射机制动态生成。
2.静态代理类通常只代理一个类。动态代理类通常代理接口下的所有类。
3.静态代理事先知道要代理的是什么。动态代理事先不知道要代理的是什么,只有在运行的时候才能确定。
4.动态代理的调用处理程序必须事先InvocationHandler接口,及使用Proxy类中的newProxyInstance方法动态的创建代理类。
5.Java动态代理只能代理接口,要代理类需要使用第三方的CLIGB等类库。
JDK动态代理和CGLIB动态代理的区别?
JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。
Enhancer
Enhancer动态创建了给定类型的子类但是拦截了所有的方法。和Proxy不一样的是,不管是接口还是类他都能正常工作。

图神经网络实战——总结 | 图神经网络展望 短短数年时间,图神经网络 (Graph Neural Networks, GNN) 已经成为一种重要的深度学习架构,并且已经广泛应用于各个行业。通过本专栏的学习,能够对图学习和 GNN 领域有一个全面的了解,并能为各种应用设计、构建GNN模型。 阅读详情

相关推荐

群晖Docker安装GitLab

external_url ‘http://lanweixia.synology.me’ 这种情况访问页面的时候加上端口没问题,但是会导致http的克隆地址没有端口。external_url ‘http://lanweixia.synology.me:8000’ 加端口的话,又会导致页面访问不了,Gitlab也一直处于启动状态。​ 完成以后修改docke—>gitlab—>config---->gitlab.rb。就是上面改的端口(docker的端口)首次进入,会设置密码,这个密码就是用户名。

Lim的博客 9101

动态代理的两种实现方式

介绍的jdk动态代理与CGLIB动态代理两种方式

凉茶铺的博客 4424

AT91SAM9260搭建LINUX操作系统

一、 编写目的 2 二、 系统搭建 2 1. 下载相关软件包 2 2. Bootstrap编译 3 3. U-BOOT编译 5 4. LINUX编译 7 5. 通过U-BOOT的TFTP命令从TFTP服务器下载系统镜像 9 6. 文件系统制作 10 7. 挂载NFS作为根文件系统 10 三、 总结 14 一、编写目的 本文档用于记录AT91SAM9260 LINUX学

lshiceman的专栏 7412

动态代理的俩种实现方式

提到设计模式,我们不得不提下代理模式,这里给出其定义:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。说白了就是我们不能直接操作被代理的对象,而只能通过操作代理对象而间接操作被代理的对象。这就好比水厂、送水代理点、用户三者的关系,水厂就是被代理的对象,送水代理点就是代理对象,用户就是要访问被代理对象的客户,用户不能直接跟水厂买水,得去代理点买水,代理点卖水给用户,然后再去水厂进水。spr...

知其然,必将知其所以然 3529

Blender.粒子效果

Blender.粒子效果 ✦ shift+A新建一个棱角球,细分(之后要分解成许多小颗粒) ✦ 给球添加粒子系统,这时播放粒子会向下掉,力场权重☛重力☛0后,粒子会在球体周围运动 ✦ shift+A添加一个力场,调整力场强度 ✦如果粒子运动太快,我们可以在输出属性中调整时间重映射的原始值 ✦想让粒子在球周围运动而不是发散出去,在物理属性找到力场设置,调整流的大小 ✦S键将球形缩小到看不见 ✦给粒子变添加立方体的形状,在粒子属性里找到渲染选项,将“光晕”改为“物体”,在实例物体中选择新建的立方

weixin_46385629的博客 6668

用matlab编程求矩阵的极大无关组,向量组极大无关组表示问题

已知向量组T:Eqn11.gif (3.16 KB, 下载次数: 1)2013-10-21 19:19 上传.(1) 求向量组T的秩,并判断向量组T的相关性;(2) 求T的极大线性无关组;(3) 将其余的向量用所求的极大线性无关组线性表示。程序:>> A=[1 1 3 2;-1 1 -1 3;5-2 8 9;-1 3 1 7]>> r=rank(A)>> A1=...

weixin_35094083的博客 7385

动态代理的实现方式

动态代理的实现技术

hwt的博客 1116

STC单片机使用FatFs文件系统读取SD卡指定文件内容

STC单片机使用FatFs文件系统读取SD卡指定文件内容

perseverance51博客 2744

Java动态代理四种实现方式详解

https://www.jb51.net/article/209607.htm

u013452335的博客 659

13、超声断层乳腺图像融合算法:乳腺癌诊断新突破

本文介绍了一种新型超声断层乳腺图像融合算法,通过结合超声透射(UTTc、UTTα)和反射断层图像(URT),实现对乳腺组织的多参数自动可视化。该算法能有效区分良性与恶性肿瘤,具有高准确性、无辐射、低成本等优势,适用于大规模乳腺癌早期筛查。初步临床测试验证了其可行性,未来有望成为乳腺癌诊断的新标准。

9q8w7e6r5的博客 153

CGAL AlphaShape算法(自适应Alpha值,二维版本)

CGAL AlphaShape算法(自适应Alpha值,二维版本)

dayuhaitang1的博客 2322

动态代理的几种实现方式及优缺点

a、CGLB动态代理实现方式降低了被代理对象的要求 b、CGLB动态代理对于被代理对象的final方法无法进行增强

idaretobe的专栏 1222

InvocationException: GraphViz‘s executables not found【BUG已解决】

在机器学习框架中遇到了一个bug:安装了GraphViz模块后,在对着sklearn的决策树文档操作输出决策树模型结果时,还是爆出了如下的错误: 报错位置为: 报错语句为:网上很多答案告诉我们,要我们安装GraphViz模块,然而并不对! 如下,我安装了GraphViz,但是还是报错了。 所以说问题不在这,我查阅质料发现,改正这个bug的方法有一个:下文详细描述。解决bug为: 1.去graphviz.官方下载自己电脑符合的操作系统的安装包:2,安装的时候,记住自己安装在电脑里的位置:以我的电脑为例,我的

一键难忘的博客 3968

动态代理实现的两种方式

我们知道不管静态代理还是动态代理,实际上都是对于源对象的一种控制,通过代理对象来间接访问目标对象。但是静态代理有以下两个问题静态代理存在的问题是:1)一旦接口新增或者修改,那么代理对象和被代理对象就得去适配修改2)静态代理是在代码编写时,去生成的,class文件必然会造成类爆炸的风险有没有方案解决以上的问题呢?显然是有的,那就是动态代理。动态代理,顾名思义,就是在运行时去动态生成代理,我们下面分别说两种实现方式,分别为JDK和Cglib。

itbird的专栏 2138

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

visio安装包

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

产品经理研读:Agent的九种设计模式(图解+代码)

上周五我在一个特工宇宙的社群里做了一次分享,题目是《从 YC 项目看 AI 趋势以及 AI agent 开发工具类产品该如何设计》,收到了大家不错的反馈,不过回看视频后还是发现不少可以提升的地方,感兴趣的朋友公众号回复“分享”获取会议录屏链接,这篇文章和大家详细讲讲分享中提到的:相关的资料(包括论文链接,原作者博客,langchain 代码实现等)已经整理在成表格(关注公众号发送“Agent”即可获得)。

python12345678_的博客 3661

efm32 入门.pdf

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

动态代理详解

刨析动态代理底层源码

qq_59718434的博客 1039

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

一篇搞明白:5种Agent模式

一篇搞明白:5种Agent模式

m0_48891301的博客 1479

什么是agent?大厂大模型必知的5种agent模式!

本文系统探讨了大模型Agent(智能体)的定义、工作模式和应用优势。Agent被定义为通过大模型模拟人类行为、使用工具完成任务的能力,其核心组件包括规划、记忆和工具使用。文中介绍了五种典型Agent模式:反射模式、工具使用模式、ReAct模式、规划模式和多智能体模式。重点分析了Agent的四大优势:1)降低应用开发门槛,使非技术人员也能创建功能;2)简化流程复杂度,大模型作为"胶水"连接各模块;3)支持多样交互方式,不限于自然语言;4)多Agent协同可完成复杂任务。

2401_85375151的博客 3224

设计模式之代理模式

文章源地址 菜鸟教程 介绍 中间商赚差价 意图:为其他对象提供一种代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。 何时使用:想...

weixin_33805992的博客 251

动态代理中最主要的两种实现方式

​ Java动态代理的优势是实现无侵入式的代码扩展,也就是方法的增强;让你可以在不用修改源码的情况下,增强一些方法;在方法的前后你可以做你任何想做的事情(甚至不去执行这个方法就可以)。总之,Java动态代理是一种非常有用的技术,可以在很多场景中发挥作用。通过巧妙地运用代理对象,我们可以实现各种自定义的逻辑,为我们的应用带来更多的灵活性和可定制性。​ 本文只是简单的谈谈这两种动态代理方式,想要更深层次的了解动态代理还需自行查阅。

weixin_73950267的博客 1130

4 种主流Agent 设计模式及应用场景

AI Agent 是一种人工智能系统,它能够在一定程度上自主地执行任务、做出决策并与之交互。与传统的人工智能模型相比,AI Agent 通常被设计为更加灵活和适应性强的实体,它们能够理解复杂的指令,甚至在没有明确编程的情况下解决问题。Agent 通过迭代的对话和反思过程,能够自我改进和优化输出,从而在多种应用场景中提供更加精准和个性化的服务。随着技术的进步,AI Agent 的能力正在不断扩展,预示着未来它们将在自动化、数据分析、用户体验优化等领域发挥更加关键的作用。

lvaolan168的博客 1607

动态代理(初级)

动态代理(理解): 基于反射机制。 一. 代理以及动态代理含义 1. 代理 & 静态代理 2. 动态代理

Ye_mulin的博客 469

AI Agent | 一文详解Agent应用的6种架构设计模式

架构设计模式已成为程序员的重要技能。然而,当我们转向大模型应用领域,情况可能会有所不同。面对新兴技术,比如:AI 大模型 Agent,我们尚缺乏成熟的设计模式来支撑这些解决方案。根据我多年的架构设计经验,我在这里整理总结了一些针对大模型 Agent 应用的设计方法和架构模式,试图应对和解决大模型 Agent 应用实现中的一些挑战,比如:成本问题、延迟问题以及生成的幻觉等问题。

m0_56255097的博客 2310

Java动态代理的实现方式

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

Mr_Richard的博客 1896

深入理解五种 Agent 模式

Planner 将项目分解为需求分析、设计、编码、测试等子任务,React Agent 逐一执行并根据完成情况进行调整,最终确保项目按时交付。规划器(Planner)将复杂任务拆解为子任务,由 React Agent 逐个执行,循环直至所有任务完成。4. 各智能体执行任务:各智能体根据分配的任务进行工作,如设计架构、编写代码、部署系统等。5. 整合结果返回用户:各智能体完成任务后,将结果汇总,形成最终的解决方案反馈给用户。3. 委派子任务:将不同子任务分配给相应角色的智能体,如技术负责人、开发人员等。

具身机器人和通用AI 1373

产品经理研读:Agent的九种设计模式(图解+代码)建议人手一份,收藏起来慢慢学!!

接下来讲讲每个模式的原理,以及代码实现(看代码能帮助产品经理加深理解,因为这些设计模式都是以结构化 prompt 的方式藏在代码里)。

Gaga246的博客 1290
上一篇: 关于字符串在常量池中中的存储问题
下一篇: 如何指定跳出多层循环
丿千寻
博客等级 码龄8年 8粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值