反射機制之---概念

反射機制是Java語言中很重要的特性,是在運行時獲知對象信息,並可在運行時操作對象的機制。

反射(Reflect), 顧名思義,通過Java對象的Class信息,可以逆向生成對象、探知運行時的對象信息、調用對象方法,一種可以反向作用的機制。

 

反射的用途:

1. 在運行時獲取任意對象所屬的類對象 

Class<?> clazz = Class.forName(String className);

 

2. 在運行時構造任意類的對象 

Object obj = clazz.newInstance();

 

3. 在運行時獲取任意類所具有的成員變量和方法 

field.set(Object obj, Object value);

field.get(Object obj);

 

4. 在運行時調用任意對象的方法 (最常見的需求,尤其是當該方法是私有方法或者隱藏方法)

method.invoke(Object obj, Object... args);

 

 

通過反射機制,已知的應用有:

1. ORM框架使用了反射機制,來實現對象和數據表的映射關係;

2. 動態代理中使用反射機制,動態生成代理角色,這樣比較好地解決了靜態代理的代碼膨脹問題。

 

 

常用的獲取類信息方法:

1.  獲取類對象

Class clazz = obj.getClass(); 

或 Class clazz = Class.forName(${className});

 

2. 獲取對象中聲明的方法:

Method[] methods = clazz.getDeclaredMethods();

 

3. 獲取對象的屬性數據:

Field[] fields = clazz.getDeclaredFields();

 

動態執行對象的方法:

1. Method.invoke()   動態執行對象的方法

如果是私有方法,先把Method的可見性設爲true,然後再調用。

method.setAccessible(true);

 

2. Field.setXXX()   動態設置對象的屬性

 

 

總結:

反射機制使Java語言在很大程序上增強了靈活性,在語言的動態的功能擴展上有了更多的想象力和空間。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章