反射常用操作
时间:2020-05-19
本文章向大家介绍反射常用操作,主要包括反射常用操作使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
定义
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
用途
在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法。
常见应用场景:
自定义注解,通过自定义注解添加权限、日志等功能
注意:反射要少用,因为反射破环了封装,效率比较低。
=================================================================
一、先创建一个model类,便于测试
package com.sh.demo.model; import lombok.Data; import org.springframework.stereotype.Repository; @Data @Repository public class User { public User() { } private int id; private String name; public String pubVal; private User(String pubVal){ this.pubVal=pubVal; } public User(String pubVal,String name){ this.pubVal=pubVal; } private String method(String str){ System.out.println(str); return str; } }
二、获得Class方式
Class aClass = new User().getClass(); aClass = Class.forName("com.sh.demo.model.User"); aClass=ClassLoader.getSystemClassLoader().loadClass("com.sh.demo.model.User");
三、获得属性
Field[] fields = aClass.getFields();//获得对象中所有public的属性 Field[] declaredFields = aClass.getDeclaredFields();//获得对象中所有属性 Field id = aClass.getField("pubVal");//获得对象中指定public的属性
四、获得方法
Method[] methods = aClass.getMethods();//获得对象中所有public的方法 Method[] declaredMethods = aClass.getDeclaredMethods();//获得对象中所有的方法 Method setId = aClass.getMethod("setId", int.class);//获得对象中指定public的方法
五、获得构造函数
Constructor<?>[] constructors = aClass.getConstructors();//获得对象中所有public的构造函数 Constructor<?>[] constructors_all = aClass.getDeclaredConstructors();//获得对象中所有的构造函数 Constructor<?> declaredConstructor = aClass.getDeclaredConstructor(String.class);//获得private的对应参数的构造函数 Constructor<?> constructor = aClass.getConstructor(String.class,String.class);//获得public的对应参数的构造函数
六、Class常用方法
aClass = Class.forName("com.sh.demo.controller.People"); Class superclass = aClass.getSuperclass();//获得当前类继承的父类的名字 Class[] interfaces = aClass.getInterfaces();//获得当前类实现的类或是接口
七、获得方法上的注解
for (Method declaredMethod : declaredMethods) { Annotation[] declaredAnnotations = declaredMethod.getAnnotations();//获得所有public方法上的注解 Bean annotation = declaredMethod.getAnnotation(Bean.class);//获得指定方法上的指定注解 }
八、执行方法
Method method = aClass.getMethod("method", String.class);//获得类中方法
Object obj = aClass.newInstance();//根据传递的参数创建类的对象
method.setAccessible(false);//设置false就可以调用private的方法,否则只能调用public的,设置false反射效率能提高3-4倍
String str = (String) method.invoke(obj, "strtest");//执行方法
原文地址:https://www.cnblogs.com/buggou/p/12913472.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 简单的源码免杀过av
- vue nextTick源码
- Kubernetes Informer机制源码解析
- @PostConstruct与@PreDestroy
- webpack插件怎么手写
- @Builder注解和@EqualsAndHashCode 注解剖析
- npm link和webpack流程
- vue mixins原理
- MySQL 5.7 特性:Online DDL
- vue国际化vue-i18n简单使用
- Kubernetes引入结构化日志
- ServerEndpoint注解无法注入NoticeService
- 警告:有用的警告|让Kubernetes的使用越来越容易
- MySQL索引凭什么让查询效率提高这么多?
- 女朋友问我:Dubbo的服务引用过程