天天看點

反射機制和内省(Introspector)以及BeanUtils内省架構筆記反射介紹内省(Introspector)以及BeanUtils内省架構

反射介紹

反射是什麼:
  • java反射機制是在*運作狀态中*,對于任意一個實體類,都能夠知道這個類的所有屬性和方法,對于任意一個對象,都能夠調用它的任意方法和屬性(意思是我們可以知道運作狀态中的任意實體類的屬性和方法,并進行對象屬性和方法的調用)。
  • 這種動态的擷取資訊以及動态調用對象屬性和方法的功能稱為java的反射機制。
  • 反射:反射是架構的靈魂,将類的各個組成部分封裝為其他對象。
  • 反射的好處:可以在程式的運作過程中去操作對象(例如泛型動态插入),位元組碼檔案,不需要重新編譯。
  • 提高了程式的擴充性,複用性,解耦(降低耦合性);
java代碼在計算機中經曆的三個階段:
反射機制和内省(Introspector)以及BeanUtils内省架構筆記反射介紹内省(Introspector)以及BeanUtils内省架構

擷取類相關資訊的方法:

<U> Class<? extends U> asSubclass(Class<u> clazz);//把傳遞的類的對象轉換成代表其子類的對象
ClassLoader getClassLoader();//獲得類的加載器
Class<?>[] getClasses();//傳回一個數組,數組中包含該類中所有公共類和接口類的對象
Class<?>[] getDeclaredClasses();//傳回一個數組,數組中包含該類中所有類和接口類的對象
static Class<?> forName(String className);//根據類名傳回類的對象
String getName();//獲得類的完整路徑名字
T newInstance();//建立類的執行個體
getPackage();//獲得類的包
String getSimpleName();//獲得類的名字
String getSuperclass();//獲得目前類繼承的父類的名字
getInterfaces();//擷取目前類實作的類或是接口
.class();//擷取目前對象的類
           

擷取類的三種方式:

三種傳回類型是Class

(1)Object–>getClass//object子類都可以調用getClass方法

(2)任何資料類型(包括基本的資料類型)都有一個“靜态”的class屬性

(3)通過class類的靜态方法:forName(String className)(最常用)

public class Fanshe {
	public static void main(String[] args) {
		//第一種方式擷取Class對象  
		Student stu1 = new Student();//這一new 産生一個Student對象,一個Class對象。
		Class stuClass = stu1.getClass();//擷取Class對象
		System.out.println(stuClass.getName());
		
		//第二種方式擷取Class對象
		Class stuClass2 = Student.class;
		System.out.println(stuClass == stuClass2);//判斷第一種方式擷取的Class對象和第二種方式擷取的是否是同一個
		
		//第三種方式擷取Class對象
		try {
			Class stuClass3 = Class.forName("fanshe.Student");//注意此字元串必須是真實路徑,就是帶包名的類路徑,包名.類名
			System.out.println(stuClass3 == stuClass2);//判斷三種方式是否擷取的是同一個Class對象
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}	
	}
}
           

注意,在運作期間,一個類,隻有一個Class對象産生,是以列印結果都是true;

三種方式中,常用第三種,第一種對象都有了還要反射幹什麼,第二種需要導入類包,依賴太強,不導包就抛編譯錯誤。一般都使用第三種,一個字元串可以傳入也可以寫在配置檔案中等多種方法。

剩餘一部分餘内容轉載(我個人覺得寫得很好):

https://blog.csdn.net/a745233700/article/details/82893076?spm=1001.2014.3001.5506

還有詳解未更新完…

内省(Introspector)以及BeanUtils内省架構

繼續閱讀