最新公告:

中华视窗是诚信为本,市场在变,我们的诚信永远不变...

中华视窗

咨询热线

400-123-4657

公司动态

当前位置: 首页 > 新闻动态 > 公司动态

java的动态代理机制详解,java动态代理的两种方式

添加时间:2024-02-01

/

java的动态代理机制详解,java动态代理的两种方式

00-1010分类案例需求定义方案一:jdk动态代理方案二:cglib动态代理分析总结

00-1010动态代理是指程序运行时确定代理类和目标类的关系,客户端通过代理类调用目标对象,就是在程序运行时动态创建目标类的代理对象。

目录

jdk动态代理

Cglib动态代理

定义

00-1010苹果通过苹果代理商销售手机。

00-1010定义抽象接口

/* * *卖手机界面(代理模式——抽象角色)* @ 3360 * @ time :22/2/22 * @ 33601.0 */ {/* *卖手机* @:李亚洁* @ date : 2022/2 22 143:44 * @ param * @ void * @ : * @ }定义目标类实现接口,重写接口方法。

/* * *苹果(代理模式——目标角色)* @ 3360 * @ time :2022/2/22 * @ 33601.0 */Class目标手机实现 { @ void sell Phone(){ . out . (苹果在卖手机);}}定义代理类

/* * * Agent(代理模式——代理角色)* @ 3360 * @ time :2022/2/22 * @ 33601.0 */ class代理电话{ 公共proxy phone( ){ this . =;} (){ proxy . ( . ()。(),.()。(),New (){ @ ( proxy, , [] args)抛出 { . out . ( JDK动态代理启动前,添加业务逻辑XXX );//利用反射机制调用目标对象的方法3360解决第二个问题: = . (,args); . out . ( JDK动态代理完成后,添加业务逻辑XXX );返回调用;} });}}定义一个测试类

/* * * Test class * @ : liya Jie * @ time :2022/2/23 * @ :1.0 */ class Test { void main([]args){//创建目标类 phone phone=new phone();//创建一个代理类 =()( phone)。()

; .out.(.()); // 通过代理类调用目标方法 .(); }}查看测试结果

动态代理流程_动态代理公司是干嘛的_动态代理是什么

方案二:cglib动态代理

定义目标类

/** * 苹果公司(代理模式——目标角色) * @author:liyajie * @createTime:2022/2/22 14:46 * @version:1.0 */public class TargetPhone { public void sellPhone() { System.out.println("苹果公司正在出售手机"); }}

定义代理工厂,用来获取代理类

/** * 代理工厂 * @author:liyajie * @createTime:2022/2/23 15:32 * @version:1.0 */public class ProxyFactory implements MethodInterceptor { private Object target; public ProxyFactory(Object target){ this.target = target; } public Object getProxyInstance(){ // 创建一个工具类 Enhancer enhancer = new Enhancer(); // 设置父类 enhancer.setSuperclass(target.getClass()); // 设置回调函数 enhancer.setCallback(this); // 创建子类对象,即代理对象 return enhancer.create(); } @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { System.out.println("cglib动态代理开始之前,添加业务逻辑xxxx"); Object invoke = method.invoke(target, objects); System.out.println("cglib动态代理之后,添加业务逻辑"); return invoke; }}

定义测试类

/** * 测试类 * @author:liyajie * @createTime:2022/2/23 15:44 * @version:1.0 */public class Test { public static void main(String[] args) { // 创建目标对象 TargetPhone targetPhone = new TargetPhone(); // 获取代理对象 TargetPhone proxyInstance = (TargetPhone)new ProxyFactory(targetPhone).getProxyInstance(); // 通过代理对象调用具体的方法 proxyInstance.sellPhone(); }}

查看测试结果

分析

首先可以看到不管是jdk动态代理,还是cglib动态代理,实现的效果和静态代理是一模一样的,都实现了功能的扩展。但是两种动态代理还是有些不同的,其中jdk动态代理需要目标对象实现接口,但是cglib动态代理不需要,因为他是在内存中构建一个子类对象,从而实现对目标对象的功能扩展。

总结

通过案例,我们了解了代理模式的几种实现方式,下面我们总结下该模式:

优势:

代理模式在客户端和目标对象之间起到了一个中介和保护的作用代理对象可以对目标对象进行功能的扩展和业务的扩展,增强目标对象代理模式可以将客户端和目标对象分离,在一定程度上降低了系统的耦合度劣势:

请求需要经过代理对象,会导致处理速度变慢因为会有大量的代理对象产生,会增加系统的复杂度到此这篇关于Java动态代理的示例详解的文章就介绍到这了,更多相关Java 动态代理内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

联系我们

电话:400-123-4657

传真:+86-123-4567

地址:浙江 温州市 温州大道欧江大厦26188号

邮箱:admin@nxdls.net

电话:400-123-4657 传真:+86-123-4567 地址:浙江 温州市 温州大道欧江大厦26188号
版权所有:Copyright © 2002-2024 中华视窗 版权所有 非商用版本 ICP备案编号:粤IP**********    网站地图