首页 理论教育 零基础Java动态代理-快速入门

零基础Java动态代理-快速入门

时间:2023-10-19 理论教育 版权反馈
【摘要】:讲解动态代理之前,首先了解一下什么是代理模式。在程序运行时由JVM通过反射等机制生成代理类的方式被称为动态代理。使用java.lang.reflect.Proxy类的静态方法newProxyInstance(),依据目标对象、业务接口及业务增强逻辑三者来自动生成一个动态代理对象。这个接口中有一个invoke()方法,具体加强的代码逻辑就是在该方法中定义的。程序的运行结果如下所示,在执行转账业务之前,通过动态代理类先对银行账户进行了安全校验。图12.4.1动态代理示例

零基础Java动态代理-快速入门

讲解动态代理之前,首先了解一下什么是代理模式。代理模式为其他的对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户对象不适于或不能直接引用目标对象,而使用代理对象则可以在客户对象和目标对象之间起到一个中介的作用。简单来说,代理模式是为了在不修改目标对象的基础上增强主业务的逻辑。以打官司为例,普通人对法律法规不是很了解,对他们来说这个流程非常麻烦,但当事人其实只关心审判结果,因此他可委托代理律师来完成整个诉讼过程,律师就好比是代理对象。

在程序运行时由JVM通过反射等机制生成代理类的方式被称为动态代理。动态代理类并不是在Java代码中定义的,代理对象与目标对象的代理关系是在程序运行中才确立的。

使用java.lang.reflect.Proxy类的静态方法newProxyInstance(),依据目标对象、业务接口及业务增强逻辑三者来自动生成一个动态代理对象。newProxyInstance()方法的源码声明形式如下:

◇ loader:目标类的类加载器,可以通过目标对象的反射来获取。

◇ interfaces:目标类实现的接口数组,可以通过目标对象的反射来获取。

◇ handler:业务增强逻辑,需要再定义。它需要实现InvocationHandler接口,用以加强目标类的主业务逻辑。这个接口中有一个invoke()方法,具体加强的代码逻辑就是在该方法中定义的。程序调用主业务逻辑时,会自动调用invoke()方法。

动手写12.4.1(www.xing528.com)

上述代码使用JDK的动态代理来模拟一个银行转账的业务,目标对象用于模拟银行的转账行为;在转账之前,往往需要先进行账户的安全校验,该校验过程可以放在动态代理中进行。程序的运行结果如下所示,在执行转账业务之前,通过动态代理类先对银行账户进行了安全校验。

图12.4.1 动态代理示例

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈