手写spring二:Java反射获取类和对象信息全解析

反射在这里的作用就是知道全路径 在框架启动的时候把类实例化 然后设置到@service 和@Autowired里面

所以要了解这东西怎么用的

1. 什么是类对象

类对象,就是用于描述这种类,都有什么属性,什么方法的

2. 获取类对象

获取类对象有3种方式
(1). Class.forName
(2). Hero.class
(3). new Hero().getClass()
在一个JVM中,一种类,只会有一个类对象存在。所以以上三种方式取出来的类对象,都是一样的。

3. 获取类对象的时候,会导致类属性被初始化

4. 通过反射机制创建一个对象

 //使用反射的方式创建对象
String className = "charactor.Hero";
//类对象
Class pClass=Class.forName(className);
//构造器
Constructor c= pClass.getConstructor();
//通过构造器实例化
Hero h2= (Hero) c.newInstance();

5. getField和getDeclaredField的区别(获取属性字段)

这两个方法都是用于获取字段
getField 只能获取public的,包括从父类继承来的字段。
getDeclaredField 可以获取本类所有的字段,包括private的,但是不能获取继承来的字段。 (注: 这里只能获取到private的字段,但并不能访问该private字段的值)

//获取类Hero的名字叫做name的字段

Field f1= h.getClass().getDeclaredField("name");

//修改这个字段的值

f1.set(h, "teemo");

6. 调用方法

// 获取这个类的名字叫做setName,参数类型是String的方法

Method m = h.getClass().getMethod("setName", String.class);

// 对h对象,调用这个方法

m.invoke(h, "盖伦");

猜你喜欢

转载自blog.csdn.net/weixin_39819191/article/details/86071885