java反射与动态代理
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反射与动态代理相关推荐
- throwable四参构造_深入分析Java反射(四)-动态代理
动态代理的简介 Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分 ...
- Java反射和动态代理
反射 通过反射的方式Class.forName("com.ahu.Person")可以获取class对象的实例以及其中的属性.方法.构造函数等 动态代理 动态代理:在不修改原业务的 ...
- Java提高班(六)反射和动态代理(JDK Proxy和Cglib)
反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多.要怎么理解以上这句话,请看下文. 一.反射 反射机制是 Ja ...
- 支撑Java框架的基础技术:泛型,反射,动态代理,cglib
以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型,反射同时对于一些高级技术例如动态代理,cglib和字节码技术也需要掌握,下面就按章节来一一说清楚这些技术的核心部分,最后手写 ...
- java底层 —反射、动态代理
java底层 -反射.动态代理和注解 1. 反射介绍 1.1 反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2 java的反射机制 java的反射机制是指在程序运行状态中,给 ...
- 死磕java底层(三)—反射、动态代理和注解
1.反射介绍 1.1反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2java的反射机制 java的反射机制是指在程序运行状态中,给定任意一个类,都可以获取到这个类的属性和方法 ...
- 吃透Java中的动态代理
动态代理在Java中是很重要的一部分,在很多框架中都会用到,如Spring中的AOP.Hadoop中的RPC等.为此在这把我对Java中的动态代理的理解分享给大家,同时写了一个模拟AOP编程的实例.( ...
- 通过反射创建动态代理对象(二)
2019独角兽企业重金招聘Python工程师标准>>> 一.概述 将"通过反射创建动态代理对象(一)"合二为一 二.代码说明 package staticimpo ...
- java 委托_动态代理:Java开发必学
一句话概括:java 动态代理通过反射机制,可在不修改原代码的情况下添加新的功能,应用于多种场景,简单.实用.灵活,是 java 开发必学知识,本文将对动态代理使用进行详细介绍. 1. 引言 最近开发 ...
最新文章
- Webpack4 学习笔记 - 01:webpack的安装和简单配置
- 关于SQLServer2000中触发器的使用——多行数据提交
- php禁止伪造_php防止伪造的数据从URL提交方法
- 库洛游戏首次公开分享:《战双帕弥什》的动作打击感是怎么做出来的
- 产品认知:真正厉害的产品经理,都是“本质思维”的高手
- 给博客或站点加入百度统计
- 浅谈Nginx性能调优
- java 返回第k小的数_java – 给定n和k,返回第k个置换序列
- 【kafka】Kafka JMX监控报错 Failed to get broker metrics for BrokerIdentity
- 我的家庭私有云计划-6
- windows——JDK下载与安装及环境变量配置
- 74CMS 3.0任意文件写入漏洞
- java jdk运行_JDK如何运行
- 一个简单的Appium测试(Python语言)
- sealos2.0使用教程,最简单kubernetesHA方案
- Webug3.0-中级进阶-解题
- css压缩有啥好处呢?
- 奔驰S400豪华型升级后排电动腿托系统,提升后排乘坐舒适性
- 数据挖掘::实验一 WEKA分类
- 云计算介绍 tcp/ip协议介绍及配置
热门文章