十六:反射与动态代理
总目录
目录
01、Java反射机制概述
1.1、使用反射,实现同上的操作
1.2、反射的强大:调用类的私有结构
02、理解Class类并获取Class实例
2.3、Class类的理解
2.4、获取Class实例的4种方式
2.5、Class实例对应的结构的说明
03、类的加载与ClassLoader的理解
3.6、了解:类的加载过程
3.7、了解:什么时候会发生类初始化?
3.8、ClassLoader的理解
3.9、使用ClassLoader加载配置文件
04、通过反射,创建运行时类的对象
4.1、举例体会反射的动态性
05、获取运行时类的完整结构
5.1、提供结构丰富Person类
5.2、获取运行时类的属性结构及其内部结构
5.3、获取运行时类的方法结构
5.4、获取运行时类的方法的内部结构
5.5、获取运行时类的构造器结构
5.6、获取运行时类的父类及父类的泛型
5.7、获取运行时类的接口、所在包、注解等
06、调用运行时类的指定结构
6.1、调用运行时类中的指定属性
6.2、调用运行时类中的指定方法
6.3、调用运行时类中的指定构造器
07、反射的应用:动态代理
7.1、代理模式与动态代理
7.2、静态代理举例
7.3、动态代理举例
7.4、AOP与动态代理的举例
01、Java反射机制概述
Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。
加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。
1、动态语言
是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。
2、静态语言
与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。
- Java不是动态语言,但Java可以称之为“准动态语言”。即Java有一定的动态性,我们可以利用反射机制、字节码操作获得类似动态语言的特性。Java的动态性让编程的时候更加灵活!
- Java反射机制提供的功能
- 在运行时判断任意一个对象所属的类
- 在运行时构造任意一个类的对象
- 在运行时判断任意一个类所具有的成员变量和方法
- 在运行时获取泛型信息
- 在运行时调用任意一个对象的成员变量和方法
- 在运行时处理注解
- 生成动态代理
- 反射相关的主要API
- java.lang.Class:代表一个类
- java.lang.reflect.Method:代表类的方法
- java.lang.reflect.Field:代表类的成员变量
- java.lang.reflect.Constructor:代表类的构造器
测试类
import org.junit.Test;public class ReflectionTest {//反射之前,对于Person的操作@Testpublic void test(){//1.创建类的对象Person p1 = new Person("jay",21);//2.调用对象,调用其内部的属性和方法p1.age = 15;System.out.println(p1.toString());p1.show();//在Person类的外部,不可以通过Person类的对象调用其内部私有的结构。//比如:name、showNation以及私有的构造器。}
}
Person类
package github;public class Person {private String name;public int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}private Person(String name) {this.name = name;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}public void show(){System.out.println("你好,我是
十六:反射与动态代理相关推荐
- Java提高班(六)反射和动态代理(JDK Proxy和Cglib)
反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多.要怎么理解以上这句话,请看下文. 一.反射 反射机制是 Ja ...
- 通过反射创建动态代理对象(二)
2019独角兽企业重金招聘Python工程师标准>>> 一.概述 将"通过反射创建动态代理对象(一)"合二为一 二.代码说明 package staticimpo ...
- MyBatis源码解析【4】反射和动态代理
通过之前的介绍,我们了解了几个组件的生命周期. 它也是我们重要装备之一. 今天我们需要搞一件更加强的装备,叫做反射和动态代理. 如果没有这件装备的话,显然后面的源码boss是打不动的. 顺便说一下,下 ...
- 通过反射创建动态代理对象(三)
2019独角兽企业重金招聘Python工程师标准>>> 一.概述 传入目标对象和Advice(要执行的内容)对"通过反射创建动态代理对象(二)"进行改造(AOP框 ...
- android hook底层代码_Java-Hook技术-入门实践(反射、动态代理)-Hook拦截通知(当前App/Context)...
老样子,上一篇MonkeyLei:Java-Hook技术-入门实践+反射.动态代理.热修复再看看 我们Hook学习了一下,一个是Java本地Main的实践练习. 一个是Android的监听事件的Hoo ...
- Android APP热更新中的插件化(Hook技术:反射或动态代理),Demo (2)
修改AAPT,资源分区,用于Android插件化- https://github.com/BaoBaoJianqiang/AAPT -- Android下的挂钩(hook)和代码注入(inject) ...
- java底层 —反射、动态代理
java底层 -反射.动态代理和注解 1. 反射介绍 1.1 反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2 java的反射机制 java的反射机制是指在程序运行状态中,给 ...
- 死磕java底层(三)—反射、动态代理和注解
1.反射介绍 1.1反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2java的反射机制 java的反射机制是指在程序运行状态中,给定任意一个类,都可以获取到这个类的属性和方法 ...
- 支撑Java框架的基础技术:泛型,反射,动态代理,cglib
以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型,反射同时对于一些高级技术例如动态代理,cglib和字节码技术也需要掌握,下面就按章节来一一说清楚这些技术的核心部分,最后手写 ...
最新文章
- C语言从51单片机led数组,51单片机之C语言-4.2数组
- [**经典**] 电脑故障检查不完全流程图
- 服务器centos7系统更换网卡,Centos7更换网卡名称(示例代码)
- seaborn.heatmap概述
- 文件操作(stat)
- 学习mfc的一些方法
- System V信号量
- 关于移动平台的viewport
- java day24【Stream流、方法引用】
- UNIX 高级环境编程 第10章 信号
- noip2002 矩形覆盖
- 离线语音风扇设计应用案例
- wlan mac地址 network interface IPv6 IPv4
- 合伙企业怎么报所得税
- JS 获取操作删除节点
- 移动端 H5 概念术语(一)
- win10家庭版调出组策略(gpedit.msc)要求的函数不受支持
- php GD库的使用
- Linux 管理联网 nmcli常用命令
- 谈谈个人网站的建立(五)—— 小集群的部署
热门文章
- 记Vue报错Custom elements in iteration require ‘v-bind:key‘ directives.“错误解决
- 聚合和组合关系的代码体现
- java语音验证码_Java实现发送手机短信语音验证功能代码实例
- http://www.discuz.net/forum.php?mod=viewthreadtid=611716page=1authorid=13759
- 串口屏如何配置波特率
- transform使用导致元素内字体出现模糊的坑~~~
- python排版word文档 效率_「word技巧」懂得这几个word排版小技巧,还怕效率不高?...
- Windows 7 Pro Vl ENT(专业版vl及企业版)
- ICML 2022 | 清华提出FGST:首个视频去模糊的Transformer
- 关于SharpDevelop代码分析的文章