首页 > 编程语言 > 详细

Spring - 反射

时间:2020-11-15 16:20:30      阅读:26      评论:0      收藏:0      [点我收藏+]

反射介绍

Java的反射机制是在运行的状态中,对于任意的一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,能够调用它的任意一个属性和方法,这种动态获取的信息以及动态调用对象的方法的功能成为java语言的反射机制。简单一句话,反射技术可以对类进行解剖。

字节码文件对象获取的三种方式

  1. 有对象,通过 对象.getClass(); 获取
Person p = new Person(); //对象
Class<? extends Person> class1 = p.getClass(); //获取
  1. 有类名,通过 类名.class; 获取
Class<? extends Person> class2 = Person.class;
  1. 有权限定类名,通过 Class.forName("权限定类名"); 获取
Class.forName("com.aishang.java.Person"); //包名+类名

创建对象的五种方式

  1. new 对象
  2. 字节码文件对象.newInstance(); 创建对象
Class clazz = Class.forName("com.aishang.java.Person");
Person person = (Person)clazz.newInstance();
  1. 构造器创建对象 constructor.newInstance("张三",20);
public void fun4() throws Exception{0
			
	Class clazz = Class.forName("com.aishang.java.Person");		
		
		Constructor[] constructors = clazz.getConstructors();	
		for (Constructor constructor : constructors) {
			System.out.println(constructor);
		}
		
	Constructor constructor = clazz.getConstructor(String.class,Integer.class);	
		Person p = (Person)constructor.newInstance("张三",20);
		System.out.println(p.toString());
		}
  1. Object.clone(); 快速创建对象的副本
  2. 反序列化

字段(成员变量)的获取

  1. 获取所有权限的字段
clazz.getDeclaredFields();
  1. 获取所有public权限的字段(成员变量)
clazz.getFields();
  1. 获取任意字段(成员变量)
clazz.getDeclaredField("字段名");
  1. 赋值:如果该字段为私有访问权限则加暴力访问
field.set(对象, 参数);
  1. 暴力访问
field.setAccessible(true);

方法的获取

  1. 获取本类及父类公有的方法
clazz.getMethods();
  1. 获取本类所有方法
clazz.getDeclaredMethods();
  1. 获取私有方法
Object invoke = method.invoke(对象(若为静态方法可为null), 参数列表); //invoke 为返回值

Spring - 反射

原文:https://www.cnblogs.com/yc0014/p/13976841.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!