002--AOP(JDK动态代理)

本文深入探讨Java动态代理机制,介绍如何利用JDK内置工具实现动态代理,并通过具体示例展示其工作原理。文章涵盖InvocationHandler接口及Proxy类的使用方法,适合希望了解或应用动态代理技术的开发者。

AOP

 


 

1 概述

在对静态代理的讨论中,可以发现,如果方法比较多的情况下,为每种方法做代理,是一件重复和繁琐的工作。需要有一种机制能够截获方法调用,从而集中处理。这就是将探讨的动态代理。

在Java中,动态代理是指代理类的生成发生在程序运行时期,根据被代理类动态生成代理类的字节码文件(class文件),并且装载到运行环境中,像其他的类一样使用,该字节码文件的生存期随着运行环境的关闭而消失。

JDK1.3以及之上的版本提供了动态代理的机制,它和反射机制结合在一起。下面将以一个例子说明JDK的动态代理。

 

2 JDK动态代理

2.1 JDK提供的接口和类

  • InvocationHandler接口

该接口的定义如下:

它定义了唯一的方法invoke,该方法的参数为代理对象proxy,截获的方法对象method,和方法调用的参数,返回方法执行的结果。

开发者需要实现该接口,在invoke方法中添加对截获的方法的代理操作,并调用被代理对象的方法。

  • Proxy类

该类是生成代理类的帮助类,它的几个主要方法如下:

public Static Class getProxyClass (ClassLoader loader, Class[] interfaces):根据指定的类加载器和接口获得一个代理类,其中,loader是类加载器,interfaces是被代理类所拥有的接口。 
public Static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h):根据指定的类加载器、接口以及截获器,返回代理类的一个实例对象。

2.2 Comand接口和ConnectCommand类

我们仍然以静态代理一文中的场景中的Command接口和ConnectCommand类为例说明。Command接口如下:


 

 

 

ConnectCommand类如下,仅作为演示使用。

 

 

2.3基于JDK的动态代理的实现

 截获器InvocationHandler的实现如下:


 

 

ConnectCommandHandler在被代理对象original的方法执行前后,可以做一些代理的操作,这里仅仅输出信息作为演示。

创建代理的类JDKProxyCreator的实现如下:


 

 

测试类如下:

 

 

测试结果如下:

Without proxying:

Excuting command...


With interface proxying(jdk-dynamic):

Before excuting command...

Excuting command...

After excuting command...

 

3 分析总结

分析JDK提供的帮助类Proxy,可以发现,它只支持实现接口方式的代理,不支持继承超类方式的代理,这就意味着,被代理的类必须要有接口,并且需要拦截的方法必须都在接口中进行声明。在本例中,通过截获帮助类Proxy生成的代理类的字节码文件,反编译之后,发现,其类的声明如下:

public final class proxy0 extends Proxy implements Command

其中,proxy0就是动态生成的代理类的名字,在该类的方法中,都会将调用委托到拦截器的invoker方法。

因为JDK提供的动态代理仅支持接口方式的代理,那么如果被代理的类没有实现任何接口,如何处理呢?后续将探讨基于CGLib的动态代理,它同时也支持继承超类的方式的代理。

 

 

 

 

 

 

 

MATLAB主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性内容概要:本文主要介绍了一种在MATLAB环境下实现的主动噪声和振动控制算法,该算法针对较大的次级路径变化具有较强的鲁棒性。文中详细阐述了算法的设计原理与实现方法,重点解决了传统控制系统中因次级路径动态变化导致性能下降的问题。通过引入自适应机制和鲁棒控制策略,提升了系统在复杂环境下的稳定性和控制精度,适用于需要高精度噪声与振动抑制的实际工程场景。此外,文档还列举了多个MATLAB仿真实例及相关科研技术服务内容,涵盖信号处理、智能优化、机器学习等多个交叉领域。; 适合人群:具备一定MATLAB编程基础和控制系统理论知识的科研人员及工程技术人员,尤其适合从事噪声与振动控制、信号处理、自动化等相关领域的研究生和工程师。; 使用场景及目标:①应用于汽车、航空航天、精密仪器等对噪声和振动敏感的工业领域;②用于提升现有主动控制系统对参数变化的适应能力;③为相关科研项目提供算法验证与仿真平台支持; 阅读建议:建议读者结合提供的MATLAB代码进行仿真实验,深入理解算法在不同次级路径条件下的响应特性,并可通过调整控制参数进一步探究其鲁棒性边界。同时可参考文档中列出的相关技术案例拓展应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值