class="markdown_views prism-atom-one-dark">
一、类加载器
1、Java类加载机制
加载:将class 文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java .lang.Class对象,作为方法区类数据的访问入口。 链接:将java 类的二进制代码合并到 jvm的运行状态之中的过程,链接过程又分为3个过程:
验证:确保加载的类信息符合jvm规范,没有安全方面的问题。 准备:正式为类变量(static变量)分配内存并设置类变量初始值的阶段, 这些内存都将在方法区中进行分配。 解析:虚拟机常量池内的符号引用替换为直接引用的过程。(比如String s =“aaa”,转化为 s的地址指向“aaa”的地址) 初始化:初始化阶段是执行类构造器方法的过程。类构造器方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static块)中的语句合并产生的。当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先初始化其父类的初始化虚拟机会保证一个类的构造器方法在多线程环境中被正确加锁和同步 当访问一个java 类的静态域时,只有真正声明这个静态变量的类才会被初始 化。
Java类的生命周期:
2、ClassLoader类加载器
ClassLoader类加载器的作用就是将 .class
文件加载到JVM虚拟机中去。
class="prism language-java ">class="token keyword">package comclass="token punctuation">. lydmsclass="token punctuation">. testclass="token punctuation">;
class="token keyword">public class="token keyword">class class="token class -name">ClassLoaderDemo class="token punctuation">{
class="token keyword">public class="token keyword">static class="token keyword">void class="token function">main class="token punctuation">( Stringclass="token punctuation">[ class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws ClassNotFoundException class="token punctuation">{
class="token comment">//获取类加载器
ClassLoader class Loader class="token operator">= ClassLoaderDemoclass="token punctuation">. class="token keyword">class class="token punctuation">. class="token function">getClassLoader class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token comment">//常用三种方式加载类
class="token comment">// 使用ClassLoader.loadClass()来加载类,不会执行初始化块
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"‐‐ClassLoader.loadClass()‐‐" class="token punctuation">) class="token punctuation">;
class Loaderclass="token punctuation">. class="token function">loadClass class="token punctuation">( class="token string">"com.lydms.test.Test1" class="token punctuation">) class="token punctuation">;
class="token comment">// 使用Class.forName(clssName) 来加载类,默认会执行初始化块
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"‐‐Class.forName(clssName)‐‐" class="token punctuation">) class="token punctuation">;
Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"com.lydms.test.Test2" class="token punctuation">) class="token punctuation">;
class="token comment">// 使用Class.forName(class Name, initialize, ClassLoader) 来加载类,并指定ClassLoader,初始化时不执行静态块.
class="token comment">// 参数:类名,是否初始化,类加载器
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"‐‐Class.forName(class Name,initialize,ClassLoader)‐‐" class="token punctuation">) class="token punctuation">;
Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"com.lydms.test.Test3" class="token punctuation">, class="token boolean">false class="token punctuation">, class Loaderclass="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
class="token keyword">class class="token class -name">Test1 class="token punctuation">{
class="token keyword">static class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"Test1 静态初始化块" class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
class="token keyword">class class="token class -name">Test2 class="token punctuation">{
class="token keyword">static class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"Test2 静态初始化块" class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
class="token keyword">class class="token class -name">Test3 class="token punctuation">{
class="token keyword">static class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"Test3 静态初始化块" class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
二、获取Class对象的方式
1、Class.forName(“全类名”)
通过指定的字符串路径获取
class="prism language-java ">Classclass="token operator">< class="token operator">? class="token operator">> aClass class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"com.lydms.class es.TestFiled" class="token punctuation">) class="token punctuation">;
通过类名的属性class 获取
class="prism language-java ">Classclass="token generics function">class="token punctuation">< ArrayListclass="token punctuation">> arrayListClass class="token operator">= ArrayListclass="token punctuation">. class="token keyword">class class="token punctuation">;
3、对象.getClass()
通过对象的getClass()方法获取
class="prism language-java ">Classclass="token operator">< class="token operator">? class="token keyword">extends class="token class -name">TestFiled class="token operator">> aClass class="token operator">= class="token keyword">new class="token class -name">TestFiled class="token punctuation">( class="token punctuation">) class="token punctuation">. class="token function">getClass class="token punctuation">( class="token punctuation">) class="token punctuation">;
三、常用方法:
字节码文件 Class类 Class.forName() 构造方法 Constructor类 getConstructor() 成员方法 Method类 getMethod() 成员变量 Field类 getField()
首先获取该类的class 对象
class="prism language-java ">Classclass="token operator">< class="token operator">? class="token operator">> aClass class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"com.lydms.class es.TestFiled" class="token punctuation">) class="token punctuation">;
1、获取构造方法、成员方法、成员变量(公开的public)
class="prism language-java ">class="token comment">// 构造方法
Constructorclass="token operator">< class="token operator">? class="token operator">> class="token punctuation">[ class="token punctuation">] constructors class="token operator">= aClassclass="token punctuation">. class="token function">getConstructors class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token comment">// 成员方法
Methodclass="token punctuation">[ class="token punctuation">] methods class="token operator">= aClassclass="token punctuation">. class="token function">getMethods class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token comment">// 成员变量
Fieldclass="token punctuation">[ class="token punctuation">] fields class="token operator">= aClassclass="token punctuation">. class="token function">getFields class="token punctuation">( class="token punctuation">) class="token punctuation">;
2、获取构造方法、成员方法、成员变量(所有的public+private)
class="prism language-java ">class="token comment">// 构造方法
Constructorclass="token operator">< class="token operator">? class="token operator">> class="token punctuation">[ class="token punctuation">] declaredConstructors class="token operator">= aClassclass="token punctuation">. class="token function">getDeclaredConstructors class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token comment">// 成员方法
Methodclass="token punctuation">[ class="token punctuation">] declaredMethods class="token operator">= aClassclass="token punctuation">. class="token function">getDeclaredMethods class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token comment">// 成员变量
Fieldclass="token punctuation">[ class="token punctuation">] declaredFields class="token operator">= aClassclass="token punctuation">. class="token function">getDeclaredFields class="token punctuation">( class="token punctuation">) class="token punctuation">;
3、获取名称
class="prism language-java ">String name class="token operator">= aClassclass="token punctuation">. class="token function">getName class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token comment">// 返回源代码中给出的底层类的简称。
String simpleName class="token operator">= aClassclass="token punctuation">. class="token function">getSimpleName class="token punctuation">( class="token punctuation">) class="token punctuation">;
String typeName class="token operator">= aClassclass="token punctuation">. class="token function">getTypeName class="token punctuation">( class="token punctuation">) class="token punctuation">;
4、获取父接口
class="prism language-java ">Classclass="token operator">< class="token operator">? class="token operator">> superclass class="token operator">= aClassclass="token punctuation">. class="token function">getSuperclass class="token punctuation">( class="token punctuation">) class="token punctuation">;
5、获取实现的接口
class="prism language-java ">Classclass="token operator">< class="token operator">? class="token operator">> class="token punctuation">[ class="token punctuation">] interfaces class="token operator">= aClassclass="token punctuation">. class="token function">getInterfaces class="token punctuation">( class="token punctuation">) class="token punctuation">;
6、实例化为新对象
class="prism language-java ">Object newInstance class="token operator">= aClassclass="token punctuation">. class="token function">newInstance class="token punctuation">( class="token punctuation">) class="token punctuation">;
7、返回此元素上存在的所有注释
返回此元素上存在的所有注释(public)
class="prism language-java ">RestController annotation class="token operator">= aClassclass="token punctuation">. class="token function">getAnnotation class="token punctuation">( RestControllerclass="token punctuation">. class="token keyword">class class="token punctuation">) class="token punctuation">;
class="token comment">// 获取所有
Annotationclass="token punctuation">[ class="token punctuation">] annotations class="token operator">= aClassclass="token punctuation">. class="token function">getAnnotations class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token keyword">for class="token punctuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punctuation">; i class="token operator">< annotationsclass="token punctuation">. lengthclass="token punctuation">; iclass="token operator">++ class="token punctuation">) class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( annotationsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">toString class="token punctuation">( class="token punctuation">) class="token punctuation">) class="token punctuation">;
class="token punctuation">}
返回此元素上存在的所有注释(public+private)
class="prism language-java ">RestController declaredAnnotation class="token operator">= aClassclass="token punctuation">. class="token function">getDeclaredAnnotation class="token punctuation">( RestControllerclass="token punctuation">. class="token keyword">class class="token punctuation">) class="token punctuation">;
class="token comment">// 获取所有
Annotationclass="token punctuation">[ class="token punctuation">] aas class="token operator">= aClassclass="token punctuation">. class="token function">getDeclaredAnnotations class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token keyword">for class="token punctuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punctuation">; i class="token operator">< aasclass="token punctuation">. lengthclass="token punctuation">; iclass="token operator">++ class="token punctuation">) class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( aasclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">toString class="token punctuation">( class="token punctuation">) class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class es_180">8、返回此类的包(package com.lydms.class es)
class="prism language-java ">String packUrl class="token operator">= aClassclass="token punctuation">. class="token function">getPackage class="token punctuation">( class="token punctuation">) class="token punctuation">. class="token function">toString class="token punctuation">( class="token punctuation">) class="token punctuation">;
9、查找带有给定名称的资源(打印绝对路径)
class="prism language-java ">URL resource class="token operator">= aClassclass="token punctuation">. class="token function">getResource class="token punctuation">( class="token string">"TestFiled.class " class="token punctuation">) class="token punctuation">;
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( resourceclass="token punctuation">. class="token function">getPath class="token punctuation">( class="token punctuation">) class="token punctuation">. class="token function">toString class="token punctuation">( class="token punctuation">) class="token punctuation">) class="token punctuation">;
10、判断类型
class="prism language-java ">class="token comment">// 是否为数组类
class="token keyword">boolean isArray class="token operator">= aClassclass="token punctuation">. class="token function">isArray class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token comment">// 是否为接口类
class="token keyword">boolean isInterface class="token operator">= aClassclass="token punctuation">. class="token function">isInterface class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token comment">// 是否为枚举类
class="token keyword">boolean isEnum class="token operator">= aClassclass="token punctuation">. class="token function">isEnum class="token punctuation">( class="token punctuation">) class="token punctuation">;
四、案例
1、获取对应的名称
class="prism language-java ">class="token function">getName class="token punctuation">( class="token punctuation">) class="token punctuation">;
通过一个对象获得完整的包名+类名(java .util.HashMap)
class="prism language-java ">HashMapclass="token generics function">class="token punctuation">< Stringclass="token punctuation">, Stringclass="token punctuation">> hashMap class="token operator">= class="token keyword">new class="token class -name">HashMap class="token operator">< class="token operator">> class="token punctuation">( class="token punctuation">) class="token punctuation">;
String name class="token operator">= hashMapclass="token punctuation">. class="token function">getClass class="token punctuation">( class="token punctuation">) class="token punctuation">. class="token function">getName class="token punctuation">( class="token punctuation">) class="token punctuation">;
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( nameclass="token punctuation">) class="token punctuation">;
2、获得类的简称(HashMap)
class="prism language-java ">class="token function">getSimpleName class="token punctuation">( class="token punctuation">) class="token punctuation">;
获得类的简称(HashMap)
class="prism language-java ">HashMapclass="token generics function">class="token punctuation">< Stringclass="token punctuation">, Stringclass="token punctuation">> hashMap class="token operator">= class="token keyword">new class="token class -name">HashMap class="token operator">< class="token operator">> class="token punctuation">( class="token punctuation">) class="token punctuation">;
String typeName class="token operator">= hashMapclass="token punctuation">. class="token function">getClass class="token punctuation">( class="token punctuation">) class="token punctuation">. class="token function">getSimpleName class="token punctuation">( class="token punctuation">) class="token punctuation">;
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( typeNameclass="token punctuation">) class="token punctuation">;
3.实例化Class对象
class="prism language-java ">class="token function">forName class="token punctuation">( class="token string">"com.lydms.utils.Test" class="token punctuation">)
class="prism language-java ">class="token keyword">package comclass="token punctuation">. lydmsclass="token punctuation">. utilsclass="token punctuation">;
class="token keyword">public class="token keyword">class class="token class -name">Test class="token punctuation">{
class="token keyword">public class="token keyword">static class="token keyword">void class="token function">main class="token punctuation">( Stringclass="token punctuation">[ class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws ClassNotFoundException class="token punctuation">{
class="token comment">// 实例化Class对象(com.lydms.utils.Test)
Classclass="token operator">< class="token operator">? class="token operator">> aClass1 class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"com.lydms.utils.Test" class="token punctuation">) class="token punctuation">;
Classclass="token operator">< class="token operator">? class="token keyword">extends class="token class -name">Test class="token operator">> aClass2 class="token operator">= class="token keyword">new class="token class -name">Test class="token punctuation">( class="token punctuation">) class="token punctuation">. class="token function">getClass class="token punctuation">( class="token punctuation">) class="token punctuation">;
Classclass="token generics function">class="token punctuation">< Testclass="token punctuation">> aClass3 class="token operator">= Testclass="token punctuation">. class="token keyword">class class="token punctuation">;
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( aClass1class="token punctuation">. class="token function">getName class="token punctuation">( class="token punctuation">) class="token punctuation">) class="token punctuation">;
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( aClass2class="token punctuation">. class="token function">getName class="token punctuation">( class="token punctuation">) class="token punctuation">) class="token punctuation">;
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( aClass3class="token punctuation">. class="token function">getName class="token punctuation">( class="token punctuation">) class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
4、获取一个对象的父接口和实现的接口
class="prism language-java ">class="token function">getSuperclass class="token punctuation">( class="token punctuation">) class="token punctuation">; class="token comment">//父接口
class="token function">getInterfaces class="token punctuation">( class="token punctuation">) class="token punctuation">; class="token comment">//接口实现类
class="prism language-java ">class="token keyword">package comclass="token punctuation">. lydmsclass="token punctuation">. utilsclass="token punctuation">;
class="token keyword">import java class="token punctuation">. ioclass="token punctuation">. Serializableclass="token punctuation">;
class="token keyword">public class="token keyword">class class="token class -name">Test class="token keyword">implements class="token class -name">Serializable class="token punctuation">{
class="token keyword">public class="token keyword">static class="token keyword">void class="token function">main class="token punctuation">( Stringclass="token punctuation">[ class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws ClassNotFoundException class="token punctuation">{
class="token comment">// 4、获取一个对象的父接口和实现的接口
Classclass="token operator">< class="token operator">? class="token operator">> aClass class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"com.lydms.utils.Test" class="token punctuation">) class="token punctuation">;
Classclass="token operator">< class="token operator">? class="token operator">> superclass class="token operator">= aClassclass="token punctuation">. class="token function">getSuperclass class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token comment">// 获取到的父类
String parentName class="token operator">= superclass class="token punctuation">. class="token function">getName class="token punctuation">( class="token punctuation">) class="token punctuation">;
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"父类名为:" class="token operator">+ parentNameclass="token punctuation">) class="token punctuation">;
class="token comment">// 获得所有的接口实现类
Classclass="token operator">< class="token operator">? class="token operator">> class="token punctuation">[ class="token punctuation">] interfaces class="token operator">= aClassclass="token punctuation">. class="token function">getInterfaces class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token keyword">for class="token punctuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punctuation">; i class="token operator">< interfacesclass="token punctuation">. lengthclass="token punctuation">; iclass="token operator">++ class="token punctuation">) class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"实现的接口为:" class="token operator">+ interfacesclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
class="token punctuation">}
5、反射 机制实例化一个类的对象
class="prism language-java ">class="token function">newInstance class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token function">getConstructors class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token function">getParameterTypes class="token punctuation">( class="token punctuation">) class="token punctuation">;
方法一:
class="prism language-java ">class="token comment">// 1、强转为指定格式对象
Classclass="token operator">< class="token operator">? class="token operator">> aClass class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"com.lydms.utils.User" class="token punctuation">) class="token punctuation">;
User user class="token operator">= class="token punctuation">( Userclass="token punctuation">) aClassclass="token punctuation">. class="token function">newInstance class="token punctuation">( class="token punctuation">) class="token punctuation">;
userclass="token punctuation">. class="token function">setName class="token punctuation">( class="token string">"张三" class="token punctuation">) class="token punctuation">;
userclass="token punctuation">. class="token function">setAge class="token punctuation">( class="token number">11 class="token punctuation">) class="token punctuation">;
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( userclass="token punctuation">. class="token function">toString class="token punctuation">( class="token punctuation">) class="token punctuation">) class="token punctuation">;
方法二:
class="prism language-java ">class="token comment">// 2、方式二(先获取方法对象,在取参数)
Constructorclass="token operator">< class="token operator">? class="token operator">> class="token punctuation">[ class="token punctuation">] constructors class="token operator">= aClassclass="token punctuation">. class="token function">getConstructors class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token keyword">for class="token punctuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punctuation">; i class="token operator">< constructorsclass="token punctuation">. lengthclass="token punctuation">; iclass="token operator">++ class="token punctuation">) class="token punctuation">{
Classclass="token operator">< class="token operator">? class="token operator">> class="token punctuation">[ class="token punctuation">] parameterTypes class="token operator">= constructorsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getParameterTypes class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token keyword">for class="token punctuation">( class="token keyword">int i1 class="token operator">= class="token number">0 class="token punctuation">; i1 class="token operator">< parameterTypesclass="token punctuation">. lengthclass="token punctuation">; i1class="token operator">++ class="token punctuation">) class="token punctuation">{
String name class="token operator">= parameterTypesclass="token punctuation">[ i1class="token punctuation">] class="token punctuation">. class="token function">getName class="token punctuation">( class="token punctuation">) class="token punctuation">;
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"name" class="token operator">+ nameclass="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
实体类
class="prism language-java ">class="token keyword">package comclass="token punctuation">. lydmsclass="token punctuation">. utilsclass="token punctuation">;
class="token keyword">public class="token keyword">class class="token class -name">User class="token punctuation">{
class="token keyword">private String nameclass="token punctuation">;
class="token keyword">private class="token keyword">int ageclass="token punctuation">;
class="token keyword">public class="token function">User class="token punctuation">( String nameclass="token punctuation">, class="token keyword">int ageclass="token punctuation">) class="token punctuation">{
class="token keyword">this class="token punctuation">. name class="token operator">= nameclass="token punctuation">;
class="token keyword">this class="token punctuation">. age class="token operator">= ageclass="token punctuation">;
class="token punctuation">}
class="token keyword">public class="token function">User class="token punctuation">( class="token punctuation">) class="token punctuation">{
class="token punctuation">}
class="token keyword">public String class="token function">getName class="token punctuation">( class="token punctuation">) class="token punctuation">{
class="token keyword">return nameclass="token punctuation">;
class="token punctuation">}
class="token keyword">public class="token keyword">void class="token function">setName class="token punctuation">( String nameclass="token punctuation">) class="token punctuation">{
class="token keyword">this class="token punctuation">. name class="token operator">= nameclass="token punctuation">;
class="token punctuation">}
class="token keyword">public class="token keyword">int class="token function">getAge class="token punctuation">( class="token punctuation">) class="token punctuation">{
class="token keyword">return ageclass="token punctuation">;
class="token punctuation">}
class="token keyword">public class="token keyword">void class="token function">setAge class="token punctuation">( class="token keyword">int ageclass="token punctuation">) class="token punctuation">{
class="token keyword">this class="token punctuation">. age class="token operator">= ageclass="token punctuation">;
class="token punctuation">}
class="token annotation punctuation">@Override
class="token keyword">public String class="token function">toString class="token punctuation">( class="token punctuation">) class="token punctuation">{
class="token keyword">return class="token string">"User{" class="token operator">+
class="token string">"name='" class="token operator">+ name class="token operator">+ class="token string">'\'' class="token operator">+
class="token string">", age=" class="token operator">+ age class="token operator">+
class="token string">'}' class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
6、获取某个类的全部属性
class="prism language-java ">aClassclass="token punctuation">. class="token function">getDeclaredFields class="token punctuation">( class="token punctuation">) class="token punctuation">; class="token comment">//获取本类的全部属性(数组)
aClass1class="token punctuation">. class="token function">getFields class="token punctuation">( class="token punctuation">) class="token punctuation">; class="token comment">//获取实现的接口或父类的属性
fieldsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getModifiers class="token punctuation">( class="token punctuation">) class="token comment">//数字型权限修饰符
Modifierclass="token punctuation">. class="token function">toString class="token punctuation">( modifiersclass="token punctuation">) class="token punctuation">; class="token comment">//将返回的数字型修饰符,转为string类型。(private static final)
获取本类的全部属性(数组)
class="prism language-java ">class="token keyword">import java class="token punctuation">. langclass="token punctuation">. reflectclass="token punctuation">. Fieldclass="token punctuation">;
class="token keyword">import java class="token punctuation">. langclass="token punctuation">. reflectclass="token punctuation">. Modifierclass="token punctuation">;
class="token keyword">public class="token keyword">class class="token class -name">Test class="token punctuation">{
class="token keyword">private class="token keyword">static class="token keyword">final class="token keyword">long seriaVersionUID class="token operator">= class="token number">342342342 class="token punctuation">;
class="token keyword">public class="token keyword">static class="token keyword">void class="token function">main class="token punctuation">( Stringclass="token punctuation">[ class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
Classclass="token operator">< class="token operator">? class="token operator">> aClass class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"com.lydms.utils.Test" class="token punctuation">) class="token punctuation">;
class="token comment">// 获取本类的全部属性(循环获取)
Fieldclass="token punctuation">[ class="token punctuation">] fields class="token operator">= aClassclass="token punctuation">. class="token function">getDeclaredFields class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token keyword">for class="token punctuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punctuation">; i class="token operator">< fieldsclass="token punctuation">. lengthclass="token punctuation">; iclass="token operator">++ class="token punctuation">) class="token punctuation">{
class="token comment">// 权限修饰符(private static final)
class="token keyword">int modifiers class="token operator">= fieldsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getModifiers class="token punctuation">( class="token punctuation">) class="token punctuation">;
String str class="token operator">= Modifierclass="token punctuation">. class="token function">toString class="token punctuation">( modifiersclass="token punctuation">) class="token punctuation">;
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( strclass="token punctuation">) class="token punctuation">;
class="token comment">// 属性类型(long)
Classclass="token operator">< class="token operator">? class="token operator">> type class="token operator">= fieldsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getType class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token comment">// private static final + long + seriaVersionUID;
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( str class="token operator">+ class="token string">"+" class="token operator">+ typeclass="token punctuation">. class="token function">getName class="token punctuation">( class="token punctuation">) class="token operator">+ class="token string">"+" class="token operator">+ fieldsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getName class="token punctuation">( class="token punctuation">) class="token operator">+ class="token string">";" class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
获取实现的接口或父类的属性
class="prism language-java ">class="token keyword">public class="token keyword">interface class="token class -name">interfaceTest class="token punctuation">{
class="token keyword">static class="token keyword">final class="token keyword">long interfaceTestclass="token operator">= class="token number">111111 class="token punctuation">;
class="token punctuation">}
class="prism language-java ">class="token keyword">import java class="token punctuation">. langclass="token punctuation">. reflectclass="token punctuation">. Fieldclass="token punctuation">;
class="token keyword">import java class="token punctuation">. langclass="token punctuation">. reflectclass="token punctuation">. Modifierclass="token punctuation">;
class="token keyword">public class="token keyword">class class="token class -name">Test class="token keyword">implements class="token class -name">interfaceTest class="token punctuation">{
class="token keyword">public class="token keyword">static class="token keyword">void class="token function">main class="token punctuation">( Stringclass="token punctuation">[ class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
Classclass="token operator">< class="token operator">? class="token operator">> aClass class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"com.lydms.utils.Test" class="token punctuation">) class="token punctuation">;
Fieldclass="token punctuation">[ class="token punctuation">] fields1 class="token operator">= aClassclass="token punctuation">. class="token function">getFields class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token keyword">for class="token punctuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punctuation">; i class="token operator">< fields1class="token punctuation">. lengthclass="token punctuation">; iclass="token operator">++ class="token punctuation">) class="token punctuation">{
class="token keyword">int mo class="token operator">= fields1class="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getModifiers class="token punctuation">( class="token punctuation">) class="token punctuation">;
String str class="token operator">= Modifierclass="token punctuation">. class="token function">toString class="token punctuation">( moclass="token punctuation">) class="token punctuation">;
class="token comment">// 权限修饰符(private static final)
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( strclass="token punctuation">) class="token punctuation">;
class="token comment">// 属性类型(long)
Classclass="token operator">< class="token operator">? class="token operator">> type class="token operator">= fields1class="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getType class="token punctuation">( class="token punctuation">) class="token punctuation">;
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( typeclass="token punctuation">. class="token function">getName class="token punctuation">( class="token punctuation">) class="token punctuation">) class="token punctuation">;
class="token comment">// 方法的名称(interfaceTest)
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( fields1class="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getName class="token punctuation">( class="token punctuation">) class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
class="token punctuation">}
7、获取某个类的全部属性(修饰符,入参,返回值)
class="prism language-java ">aClassclass="token punctuation">. class="token function">getMethods class="token punctuation">( class="token punctuation">) class="token punctuation">; class="token comment">//获取类中所有方法
methodsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getName class="token punctuation">( class="token punctuation">) class="token comment">//方法名
methodsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getModifiers class="token punctuation">( class="token punctuation">) class="token punctuation">; class="token comment">//修饰符
methodsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getReturnType class="token punctuation">( class="token punctuation">) class="token punctuation">. class="token function">getTypeName class="token punctuation">( class="token punctuation">) class="token punctuation">; class="token comment">//返回值类型
methodsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getParameterTypes class="token punctuation">( class="token punctuation">) class="token punctuation">; class="token comment">//获取入参的对象
methodsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getExceptionTypes class="token punctuation">( class="token punctuation">) class="token comment">//抛出的异常
待获取方法
class="prism language-java ">class="token keyword">package comclass="token punctuation">. lydmsclass="token punctuation">. class esclass="token punctuation">;
class="token keyword">import java class="token punctuation">. ioclass="token punctuation">. IOExceptionclass="token punctuation">;
class="token keyword">import java class="token punctuation">. langclass="token punctuation">. reflectclass="token punctuation">. Methodclass="token punctuation">;
class="token keyword">import java class="token punctuation">. langclass="token punctuation">. reflectclass="token punctuation">. Modifierclass="token punctuation">;
class="token keyword">public class="token keyword">class class="token class -name">TestClass class="token punctuation">{
class="token keyword">public String class="token function">getClass class="token punctuation">( String inclass="token punctuation">) class="token keyword">throws IOException class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"获取所有的方法" class="token punctuation">) class="token punctuation">;
class="token keyword">return nullclass="token punctuation">;
class="token punctuation">}
class="token punctuation">}
获取TestClass中全部属性
class="prism language-java ">class="token keyword">public class="token keyword">static class="token keyword">void class="token function">main class="token punctuation">( Stringclass="token punctuation">[ class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
Classclass="token operator">< class="token operator">? class="token operator">> aClass class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"com.lydms.class es.TestClass" class="token punctuation">) class="token punctuation">;
Methodclass="token punctuation">[ class="token punctuation">] methods class="token operator">= aClassclass="token punctuation">. class="token function">getMethods class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token keyword">for class="token punctuation">( class="token keyword">int i class="token operator">= class="token number">0 class="token punctuation">; i class="token operator">< methodsclass="token punctuation">. lengthclass="token punctuation">; iclass="token operator">++ class="token punctuation">) class="token punctuation">{
class="token number">1. 方法名class="token punctuation">( getClassclass="token punctuation">)
String name class="token operator">= methodsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getName class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token number">2. 修饰符class="token punctuation">( class="token keyword">public class="token punctuation">)
class="token keyword">int modifiers class="token operator">= methodsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getModifiers class="token punctuation">( class="token punctuation">) class="token punctuation">;
String modifierName class="token operator">= Modifierclass="token punctuation">. class="token function">toString class="token punctuation">( modifiersclass="token punctuation">) class="token punctuation">;
class="token number">3. 返回值类型class="token punctuation">( java class="token punctuation">. langclass="token punctuation">. Stringclass="token punctuation">)
String name1 class="token operator">= methodsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getReturnType class="token punctuation">( class="token punctuation">) class="token punctuation">. class="token function">getName class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token number">4. 入参的对象class="token punctuation">( class="token keyword">class class="token class -name">java class="token punctuation">. langclass="token punctuation">. String class="token punctuation">)
Classclass="token operator">< class="token operator">? class="token operator">> class="token punctuation">[ class="token punctuation">] parameterTypes class="token operator">= methodsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getParameterTypes class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token number">5. 抛出的异常class="token punctuation">( class="token keyword">class class="token class -name">java class="token punctuation">. ioclass="token punctuation">. IOException class="token punctuation">)
Classclass="token operator">< class="token operator">? class="token operator">> class="token punctuation">[ class="token punctuation">] exceptionTypes class="token operator">= methodsclass="token punctuation">[ iclass="token punctuation">] class="token punctuation">. class="token function">getExceptionTypes class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
8、通过反射 机制调用某个类的方法
class="prism language-java ">aClassclass="token punctuation">. class="token function">newInstance class="token punctuation">( class="token punctuation">) class="token comment">//闯将TestRun类的对象
test01class="token punctuation">. class="token function">invoke class="token punctuation">( aClassclass="token punctuation">. class="token function">newInstance class="token punctuation">( class="token punctuation">) class="token punctuation">) class="token punctuation">; class="token comment">//执行test01方法
待获取方法
class="prism language-java ">class="token keyword">public class="token keyword">class class="token class -name">TestRun class="token punctuation">{
class="token keyword">public class="token keyword">void class="token function">test01 class="token punctuation">( class="token punctuation">) class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"执行Test01方法" class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token keyword">public class="token keyword">void class="token function">test02 class="token punctuation">( class="token keyword">int ageclass="token punctuation">, String nameclass="token punctuation">) class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"执行Test02方法,其中年龄:" class="token operator">+ ageclass="token operator">+ class="token string">",姓名:" class="token operator">+ nameclass="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
执行里面方法
class="prism language-java ">class="token keyword">public class="token keyword">static class="token keyword">void class="token function">main class="token punctuation">( Stringclass="token punctuation">[ class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exceptionclass="token punctuation">{
Classclass="token operator">< class="token operator">? class="token operator">> aClass class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"com.lydms.class es.TestRun" class="token punctuation">) class="token punctuation">;
class="token comment">// 1、调用TestRun类中的test01()方法
Method test01 class="token operator">= aClassclass="token punctuation">. class="token function">getMethod class="token punctuation">( class="token string">"test01" class="token punctuation">) class="token punctuation">;
test01class="token punctuation">. class="token function">invoke class="token punctuation">( aClassclass="token punctuation">. class="token function">newInstance class="token punctuation">( class="token punctuation">) class="token punctuation">) class="token punctuation">;
class="token comment">// 2、调用TestRun类中的test02()方法
Method test02 class="token operator">= aClassclass="token punctuation">. class="token function">getMethod class="token punctuation">( class="token string">"test02" class="token punctuation">, class="token keyword">int class="token punctuation">. class="token keyword">class class="token punctuation">, Stringclass="token punctuation">. class="token keyword">class class="token punctuation">) class="token punctuation">;
class="token comment">// test02的执行,需要TestRun的对象,和2个入参
test02class="token punctuation">. class="token function">invoke class="token punctuation">( aClassclass="token punctuation">. class="token function">newInstance class="token punctuation">( class="token punctuation">) class="token punctuation">, class="token number">10 class="token punctuation">, class="token string">"李四" class="token punctuation">) class="token punctuation">;
class="token punctuation">}
9、更改类中属性
class="prism language-java ">aClassclass="token punctuation">. class="token function">getDeclaredField class="token punctuation">( class="token string">"pro" class="token punctuation">) class="token punctuation">; class="token comment">//获取里面参数pro的对象
proclass="token punctuation">. class="token function">set class="token punctuation">( testObjectclass="token punctuation">, class="token string">"新的参数" class="token punctuation">) class="token punctuation">; class="token comment">//设置pro参数的值
proclass="token punctuation">. class="token function">get class="token punctuation">( testObjectclass="token punctuation">) class="token comment">//获取pro参数的值(TestFiled类对象)
待获取方法
class="prism language-java ">class="token keyword">public class="token keyword">class class="token class -name">TestFiled class="token punctuation">{
class="token keyword">private String pro class="token operator">= nullclass="token punctuation">;
class="token punctuation">}
执行里面方法
class="prism language-java ">class="token keyword">public class="token keyword">static class="token keyword">void class="token function">main class="token punctuation">( Stringclass="token punctuation">[ class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
Classclass="token operator">< class="token operator">? class="token operator">> aClass class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class="token string">"com.lydms.class es.TestFiled" class="token punctuation">) class="token punctuation">;
Field pro class="token operator">= aClassclass="token punctuation">. class="token function">getDeclaredField class="token punctuation">( class="token string">"pro" class="token punctuation">) class="token punctuation">;
class="token comment">// true 则指示反射 的对象在使用时,应该取消Java 语言访问检查
proclass="token punctuation">. class="token function">setAccessible class="token punctuation">( class="token boolean">true class="token punctuation">) class="token punctuation">;
Object testObject class="token operator">= aClassclass="token punctuation">. class="token function">newInstance class="token punctuation">( class="token punctuation">) class="token punctuation">;
proclass="token punctuation">. class="token function">set class="token punctuation">( testObjectclass="token punctuation">, class="token string">"新的参数" class="token punctuation">) class="token punctuation">;
class="token operator">/ 打印更改后的参数值
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( proclass="token punctuation">. class="token function">get class="token punctuation">( testObjectclass="token punctuation">) class="token punctuation">) class="token punctuation">;
class="token punctuation">}
10、执行配置文件中指定的类中方法
配置文件application.properties
class="prism language-java ">class Nameclass="token operator">= comclass="token punctuation">. lydmsclass="token punctuation">. utilsclass="token punctuation">. TestClass
methodNameclass="token operator">= test
测试执行的方式:
class="prism language-java ">class="token keyword">package comclass="token punctuation">. lydmsclass="token punctuation">. utilsclass="token punctuation">;
class="token keyword">public class="token keyword">class class="token class -name">TestClass class="token punctuation">{
class="token keyword">public class="token keyword">void class="token function">test class="token punctuation">( class="token punctuation">) class="token punctuation">{
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( class="token string">"通过反射 执行test中方法" class="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
反射 使用代码:
class="prism language-java ">class="token keyword">import java class="token punctuation">. ioclass="token punctuation">. FileInputStreamclass="token punctuation">;
class="token keyword">import java class="token punctuation">. ioclass="token punctuation">. InputStreamclass="token punctuation">;
class="token keyword">import java class="token punctuation">. langclass="token punctuation">. reflectclass="token punctuation">. Methodclass="token punctuation">;
class="token keyword">import java class="token punctuation">. utilclass="token punctuation">. Propertiesclass="token punctuation">;
class="token keyword">public class="token keyword">class class="token class -name">GoToClass class="token punctuation">{
class="token keyword">public class="token keyword">static class="token keyword">void class="token function">main class="token punctuation">( Stringclass="token punctuation">[ class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
class="token comment">// 1.1 创建Properties对象
Properties pro class="token operator">= class="token keyword">new class="token class -name">Properties class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token comment">// 1.2 加载配置文件,转换为一个集合
InputStream is class="token operator">= class="token keyword">new class="token class -name">FileInputStream class="token punctuation">( class="token string">"E:\Code\test\src\main\java \com\lydms\utils\TestClass.java " class="token punctuation">) class="token punctuation">;
class="token comment">// 加载配置信息
proclass="token punctuation">. class="token function">load class="token punctuation">( isclass="token punctuation">) class="token punctuation">;
class="token comment">// 2. 获取配置文件中定义的数据
String class Name class="token operator">= proclass="token punctuation">. class="token function">getProperty class="token punctuation">( class="token string">"class Name" class="token punctuation">) class="token punctuation">;
String methodName class="token operator">= proclass="token punctuation">. class="token function">getProperty class="token punctuation">( class="token string">"methodName" class="token punctuation">) class="token punctuation">;
class="token comment">// 3. 加载该类进内存
Class class="token class -name">cls class="token operator">= Classclass="token punctuation">. class="token function">forName class="token punctuation">( class Nameclass="token punctuation">) class="token punctuation">;
class="token comment">// 4. 创建对象
Object obj class="token operator">= clsclass="token punctuation">. class="token function">newInstance class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token comment">// 5. 获取方法对象
Method method class="token operator">= clsclass="token punctuation">. class="token function">getMethod class="token punctuation">( methodNameclass="token punctuation">) class="token punctuation">;
class="token comment">// 6. 执行方法
methodclass="token punctuation">. class="token function">invoke class="token punctuation">( objclass="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
执行结果:
11、通过反射 机制往List中添加任意类型的元素
注意:这只是演示反射 机制,在正常的开发中不能这样使用(忽略了创建对象时,指定的类型 )
class="prism language-java ">class="token keyword">import java class="token punctuation">. langclass="token punctuation">. reflectclass="token punctuation">. Methodclass="token punctuation">;
class="token keyword">import java class="token punctuation">. utilclass="token punctuation">. ArrayListclass="token punctuation">;
class="token keyword">import java class="token punctuation">. utilclass="token punctuation">. Dateclass="token punctuation">;
class="token keyword">import java class="token punctuation">. utilclass="token punctuation">. Listclass="token punctuation">;
class="token keyword">public class="token keyword">class class="token class -name">ReflectDemo3 class="token punctuation">{
class="token keyword">public class="token keyword">static class="token keyword">void class="token function">main class="token punctuation">( Stringclass="token punctuation">[ class="token punctuation">] argsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
Listclass="token generics function">class="token punctuation">< Integerclass="token punctuation">> list class="token operator">= class="token keyword">new class="token class -name">ArrayList class="token generics function">class="token punctuation">< Integerclass="token punctuation">> class="token punctuation">( class="token punctuation">) class="token punctuation">;
listclass="token punctuation">. class="token function">add class="token punctuation">( class="token number">11 class="token punctuation">) class="token punctuation">;
class="token comment">//获取类
Classclass="token operator">< class="token operator">? class="token operator">> class 1 class="token operator">= listclass="token punctuation">. class="token function">getClass class="token punctuation">( class="token punctuation">) class="token punctuation">;
class="token comment">//获取方法
Method addMethod class="token operator">= class 1class="token punctuation">. class="token function">getMethod class="token punctuation">( class="token string">"add" class="token punctuation">, Objectclass="token punctuation">. class="token keyword">class class="token punctuation">) class="token punctuation">;
class="token comment">//执行,添加任意类型对象
addMethodclass="token punctuation">. class="token function">invoke class="token punctuation">( listclass="token punctuation">, class="token string">"asfdgh" class="token punctuation">) class="token punctuation">;
addMethodclass="token punctuation">. class="token function">invoke class="token punctuation">( listclass="token punctuation">, class="token boolean">true class="token punctuation">) class="token punctuation">;
addMethodclass="token punctuation">. class="token function">invoke class="token punctuation">( listclass="token punctuation">, class="token keyword">new class="token class -name">Date class="token punctuation">( class="token punctuation">) class="token punctuation">) class="token punctuation">;
Systemclass="token punctuation">. outclass="token punctuation">. class="token function">println class="token punctuation">( listclass="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
12、更改方法上注解值
代码(更改board
方法中@RequestMapping
注解的值)
class="prism language-java ">class="token annotation punctuation">@RestController
class="token annotation punctuation">@RequestMapping class="token punctuation">( class="token string">"/test" class="token punctuation">)
class="token keyword">public class="token keyword">class class="token class -name">BoardController class="token punctuation">{
class="token annotation punctuation">@RequestMapping class="token punctuation">( value class="token operator">= class="token string">"/board" class="token punctuation">, method class="token operator">= class="token punctuation">{ RequestMethodclass="token punctuation">. POSTclass="token punctuation">} class="token punctuation">)
class="token keyword">public ApiResult class="token function">board class="token punctuation">( class="token annotation punctuation">@RequestBody Mapclass="token generics function">class="token punctuation">< Stringclass="token punctuation">, Objectclass="token punctuation">> paramsclass="token punctuation">) class="token keyword">throws Exception class="token punctuation">{
class="token keyword">return ApiResultclass="token punctuation">. class="token function">succ class="token punctuation">( nullclass="token punctuation">) class="token punctuation">;
class="token punctuation">}
class="token punctuation">}
获取方式
class="prism language-java ">class="token comment">// 获取成员方法的class 对象
Method board class="token operator">= BoardControllerclass="token punctuation">. class="token keyword">class class="token punctuation">. class="token function">getMethod class="token punctuation">( class="token string">"board" class="token punctuation">, Mapclass="token punctuation">. class="token keyword">class class="token punctuation">) class="token punctuation">;
class="token comment">// 获取 Test 上的注解
RequestMapping requestMapping class="token operator">= boardclass="token punctuation">. class="token function">getAnnotation class="token punctuation">( RequestMappingclass="token punctuation">. class="token keyword">class class="token punctuation">) class="token punctuation">;
class="token comment">// 获取代理处理器
InvocationHandler handler class="token operator">= Proxyclass="token punctuation">. class="token function">getInvocationHandler class="token punctuation">( requestMappingclass="token punctuation">) class="token punctuation">;
class="token comment">// 过去私有 memberValues 属性
Field f class="token operator">= handlerclass="token punctuation">. class="token function">getClass class="token punctuation">( class="token punctuation">) class="token punctuation">. class="token function">getDeclaredField class="token punctuation">( class="token string">"memberValues" class="token punctuation">) class="token punctuation">;
fclass="token punctuation">. class="token function">setAccessible class="token punctuation">( class="token boolean">true class="token punctuation">) class="token punctuation">;
class="token comment">// 获取实例的属性map
Mapclass="token generics function">class="token punctuation">< Stringclass="token punctuation">, Objectclass="token punctuation">> memberValues class="token operator">= class="token punctuation">( Mapclass="token generics function">class="token punctuation">< Stringclass="token punctuation">, Objectclass="token punctuation">> class="token punctuation">) fclass="token punctuation">. class="token function">get class="token punctuation">( handlerclass="token punctuation">) class="token punctuation">;
class="token comment">// 修改属性值
memberValuesclass="token punctuation">. class="token function">put class="token punctuation">( class="token string">"value" class="token punctuation">, class="token string">"/url" class="token punctuation">) class="token punctuation">;
五、Xmind整理
CSDN地址:
CSDN地址
百度网盘地址:
链接:https://pan.baidu.com/s/1_RKxpkZehV0wSFASdv-LXQ
提取码:czz3