当前位置: 首页 > news >正文

Java如何使用反射创建动态代理(JDK原生)呢?

转自:

Java如何使用反射创建动态代理(JDK原生)呢?

下文讲述反射创建代理类的实现方式,如下所示:
java反射机制中,借助运行时创建接口的实现类,达到动态调用类,我们将这种动态接口模式实现的代理,称之为JDK动态代理。

动态代理应用场景:
      数据库事务统一处理
	  方法增强
	  AOP

创建代理

我们可借助Proxy.newProxyInstance()方法创建动态代理
newProxyInstance()方法有三个参数:

  1. 类加载器(ClassLoader)用来加载动态代理类
  2. 一个要实现的接口的数组
  3. 一个InvocationHandler把所有方法的调用都转到代理上

InvocationHandler handler = new MyInvocationHandler();
MyInterface proxy = (MyInterface) Proxy.newProxyInstance(
                            MyInterface.class.getClassLoader(),
                            new Class[] { MyInterface.class },
                            handler);

上面的代码,定义了一个proxy变量,它包含一个MyInterface接口的动态实现,当我们调用proxy中的方法,都会转入到InvocationHandler接口的handler运行 例:

public interface InvocationHandler{
  Object invoke(Object proxy, Method method, Object[] args)
         throws Throwable;
}

public class MyInvocationHandler implements InvocationHandler{
  public Object invoke(Object proxy, Method method, Object[] args)
  throws Throwable {
    //do something "dynamic"
  }
}

相关文章:

  • 基于Springboot2.x+vue3.x整合实现微信扫码登录
  • Qt入门 【ui设计】
  • Java Reflection获取变量信息的简介说明
  • 欧美风商务简约通用PPT模板
  • 令人担忧的5G网络可被黑客入侵
  • JAVA泛型实现原理
  • 「Java数据结构和算法」手撕快速、归并、基数排序,图解解析 + 代码实现。
  • 初次使用servlet写HelloWorld
  • Linux nload显示当前的网络使用情况
  • 如何将一个引脚服用为GPIO模式
  • 数据结构与算法之美笔记06(栈)
  • Java Reflection操作方法的示例简介说明
  • 【前端】彻底搞懂HTTP协议
  • RFID系统工作原理
  • k8s之Service
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 2017 年终总结 —— 在路上
  • express如何解决request entity too large问题
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • SQLServer之创建数据库快照
  • Webpack入门之遇到的那些坑,系列示例Demo
  • web标准化(下)
  • 聊聊redis的数据结构的应用
  • 前端之Sass/Scss实战笔记
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 提醒我喝水chrome插件开发指南
  • 通过npm或yarn自动生成vue组件
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​第20课 在Android Native开发中加入新的C++类
  • ​虚拟化系列介绍(十)
  • #162 (Div. 2)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (NSDate) 时间 (time )比较
  • (ZT)薛涌:谈贫说富
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (九)c52学习之旅-定时器
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (五)IO流之ByteArrayInput/OutputStream
  • ***利用Ms05002溢出找“肉鸡
  • ***原理与防范
  • .aanva
  • .net 7 上传文件踩坑
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net framework4与其client profile版本的区别
  • .NET Standard 的管理策略
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • @Autowired和@Resource装配
  • @GetMapping和@RequestMapping的区别
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [20160902]rm -rf的惨案.txt
  • [Android Pro] Notification的使用