1. 程式人生 > >手寫spring二:Java反射獲取類和物件資訊全解析

手寫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, "蓋倫");