Java动态代理讲解和示例

Java动态代理讲解和示例,Java动态代理是一种在运行时创建代理类的机制,动态代理可以在不修改源代码的情况下,在运行时为某个接口动态生成实现类,并且可以拦截接口中的方法调用,从而实现一些特殊的功能。,Java 动态代理底层原理是基于反射机制实现的,其中最重要的是 InvocationHandler 接口,它定义了一个 invoke() 方法,用于实现对代理类中各个方法的调用,在 invoke() 方法中,可以实现对真实角色的调用,并进行扩展,实现动态代理的效果。,动态代理的实现步骤:,1. 创建一个实现 InvocationHandler 接口的类,它必须实现 invoke() 方法;,2. 创建被代理的真实对象;,3. 通过 Proxy 类的 newProxyInstance() 方法创建代理对象,它需要参数:,(1)ClassLoader:类加载器,它是用于加载代理对象字节码的,和被代理对象使用相同的类加载器;,(2)Class[]:字节码数组,它是用于让代理对象和被代理对象有相同方法;,(3)InvocationHandler:它是调用处理器,执行代理对象的方法时,会触发该对象的 invoke() 方法;,4. 通过代理对象调用目标方法,实际上会转到 invoke() 方法中,在 invoke() 方法中,可以进行预处理、调用后处理等工作。,反射上一篇文章讲过了,这里就是反射的一个应用,这个最常见的场景就是给代码加日志,例如在执行某个函数前将请求体加入到日志中,执行后将结果加入到日志中。这样可以在不改变原来代码的基础上来实现。接下来就使用上一篇反射的例子继续扩展。,先写一个Person的接口:,写他的实现:,然后写动态代理类:,最后测试一下:,我们看看结果在执行函数前后执行了其他操作:,SpringAOP其实原理就类似这种。,Java动态代理讲解和示例

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/21852.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年3月5日 上午12:00
下一篇 2023年3月7日 下午10:34