总目录

目录

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("你好,我是												

十六:反射与动态代理相关推荐

  1. Java提高班(六)反射和动态代理(JDK Proxy和Cglib)

    反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多.要怎么理解以上这句话,请看下文. 一.反射 反射机制是 Ja ...

  2. 通过反射创建动态代理对象(二)

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 将"通过反射创建动态代理对象(一)"合二为一 二.代码说明 package staticimpo ...

  3. MyBatis源码解析【4】反射和动态代理

    通过之前的介绍,我们了解了几个组件的生命周期. 它也是我们重要装备之一. 今天我们需要搞一件更加强的装备,叫做反射和动态代理. 如果没有这件装备的话,显然后面的源码boss是打不动的. 顺便说一下,下 ...

  4. 通过反射创建动态代理对象(三)

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 传入目标对象和Advice(要执行的内容)对"通过反射创建动态代理对象(二)"进行改造(AOP框 ...

  5. android hook底层代码_Java-Hook技术-入门实践(反射、动态代理)-Hook拦截通知(当前App/Context)...

    老样子,上一篇MonkeyLei:Java-Hook技术-入门实践+反射.动态代理.热修复再看看 我们Hook学习了一下,一个是Java本地Main的实践练习. 一个是Android的监听事件的Hoo ...

  6. Android APP热更新中的插件化(Hook技术:反射或动态代理),Demo (2)

    修改AAPT,资源分区,用于Android插件化- https://github.com/BaoBaoJianqiang/AAPT -- Android下的挂钩(hook)和代码注入(inject) ...

  7. java底层 —反射、动态代理

    java底层 -反射.动态代理和注解 1. 反射介绍 1.1 反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2 java的反射机制 java的反射机制是指在程序运行状态中,给 ...

  8. 死磕java底层(三)—反射、动态代理和注解

    1.反射介绍 1.1反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2java的反射机制 java的反射机制是指在程序运行状态中,给定任意一个类,都可以获取到这个类的属性和方法 ...

  9. 支撑Java框架的基础技术:泛型,反射,动态代理,cglib

    以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型,反射同时对于一些高级技术例如动态代理,cglib和字节码技术也需要掌握,下面就按章节来一一说清楚这些技术的核心部分,最后手写 ...

最新文章

  1. C语言从51单片机led数组,51单片机之C语言-4.2数组
  2. [**经典**] 电脑故障检查不完全流程图
  3. 服务器centos7系统更换网卡,Centos7更换网卡名称(示例代码)
  4. seaborn.heatmap概述
  5. 文件操作(stat)
  6. 学习mfc的一些方法
  7. System V信号量
  8. 关于移动平台的viewport
  9. java day24【Stream流、方法引用】
  10. UNIX 高级环境编程 第10章 信号
  11. noip2002 矩形覆盖
  12. 离线语音风扇设计应用案例
  13. wlan mac地址 network interface IPv6 IPv4
  14. 合伙企业怎么报所得税
  15. JS 获取操作删除节点
  16. 移动端 H5 概念术语(一)
  17. win10家庭版调出组策略(gpedit.msc)要求的函数不受支持
  18. php GD库的使用
  19. Linux 管理联网 nmcli常用命令
  20. 谈谈个人网站的建立(五)—— 小集群的部署

热门文章

  1. 记Vue报错Custom elements in iteration require ‘v-bind:key‘ directives.“错误解决
  2. 聚合和组合关系的代码体现
  3. java语音验证码_Java实现发送手机短信语音验证功能代码实例
  4. http://www.discuz.net/forum.php?mod=viewthreadtid=611716page=1authorid=13759
  5. 串口屏如何配置波特率
  6. transform使用导致元素内字体出现模糊的坑~~~
  7. python排版word文档 效率_「word技巧」懂得这几个word排版小技巧,还怕效率不高?...
  8. Windows 7 Pro Vl ENT(专业版vl及企业版)
  9. ICML 2022 | 清华提出FGST:首个视频去模糊的Transformer
  10. 关于SharpDevelop代码分析的文章