反射机制原理的深度理解2017-12-26
首先我们编写person.java文件如下:
文章图片
然后创建测试反射机制的类
文章图片
原理解析:
【反射机制原理的深度理解2017-12-26】要理解反射机制的实现过程,首先要明白几个知识点
如图1中Person.java是一个java的原文件,原文件经过编译会得到一个Person.class的二进制文件,然后类加载器ClassLoader加载 生成的Person.class 到JVM
在jvm中就会生成一个与Person.class对应的Class类型的文件,这个文件中有class文件中的属性,方法,注解,构造方法等Person.class的元信息。我们个这个文件起了对象名叫clazz.
所以可以通过创建Class类型的对象clazz(clazz是我们自己命名的),clazz就是元信息文件的对象,使用该对象调用newInstance()就能创建出一个Person类型的对象,同理也可以通过clazz来创建出Person类中的其它成员(方法,构造方法,属性等)
创建出的方法way,就可以通过关键字invoke来传入对象作为参数来执行,因为方法的执行,一定是通过对象来调用的。所以必须要有对象这个参数的传入。
文章图片
工作真实环境应用:
三大框架底层全部是基于反射机制实现的。xml配置类的唯一标识syn.reflection.study.Person。
比如有一个付款的接口PayInterface,我们的付款方法是有微信,支付宝,银联支付等,当我们付款的时候支付宝付款的类为AliPayImpl,并且AliPayImpl implements PayInterface
当我们点击支付宝支付的时候
其实后台就会有
String payImpl ="syn.study.AliPayImpl"
传到
Class.newInstance(payImpl )
就会动态创建对象了。也就是通过发射来在程序运行过程中创建对象,而不是事先new一个出来。
推荐阅读
- 做一件事情的基本原理是什么()
- 【读书笔记】贝叶斯原理
- SG平滑轨迹算法的原理和实现
- 深入理解|深入理解 Android 9.0 Crash 机制(二)
- “写作宝典”《金字塔原理》之读书笔记
- Spring|Spring 框架之 AOP 原理剖析已经出炉!!!预定的童鞋可以识别下发二维码去看了
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- Vue源码分析—响应式原理(二)
- MYSQL主从同步的实现
- (1)redis集群原理及搭建与使用(1)