jdbc之反射基礎
一、各個包代表意思: 1、Dao層:主要是連線資料庫的,BaseDao是資料庫的基類 2、實現Dao層:也是連線資料庫的,裡面有個介面Dao,介面起到強制性的約束 3、entity層:一一對應資料庫的欄位 4、utils層:工具包
二、工廠者模式: 1、多型兩種體現形式:1、作為返回值型別;2、作為方法的形參。
三、抽象工廠者模式: 1、之所以有這個是因為上面的方式可擴充套件性太差 2、步驟: 1、新建一個abstractFactory類,裡面有一個方法:abstract Pet abstractFactory(); 2、給每樣寵物類定義另外一個繼承了抽象工廠類的工廠類,返回自己對應的物件。 3、在測試類裡抽象介面指向子類物件,然後抽象類物件.abstractFactory().play();,輸出即可
四、反射: 1、就是在你的.java檔案轉換成.class檔案後,對.class檔案做手腳。 2、反射最常用的一種體現就是把熱更新變成熱修復,所有框架都用到反射。 3、特點:所有物件在我面前都是裸體。 4、所以我必須掌握.java檔案如何轉換成.class檔案,然後反射是如何找到.class檔案呢? 5、獲得.class檔案的三種方法: 1、物件.getClass(); 2、通過反射得到: 1、類名.class;(開發中少用) 2、Class.forName(“包名.類名”); 6、獲取構造方法: 1、得到所有構造方法(包括公有、私有),返回的是一個數組: 類變數.getDeclaredConstructors(); 2、得到所有公有的構造方法: 類變數.getConstrustors(); 3、得到一個公有的構造方法,並且使其被呼叫: 1、類變數.getConstrustor(); 2、得到一個物件,利用構造方法的變數.newInstance() 3、輸出這個物件即可。 4、得到一個私有的構造方法,並使其被呼叫: 1、類變數.getDeclaredConstructor(int.class);//這裡如果呼叫有參方法就放對應引數即可 2、暴力反射,利用構造方法的變數.setAccessible(true); 3、得到一個物件,利用構造方法的變數.newInstance(12);//引數裡放對應的具體值 4、輸出這個物件即可。
7、獲取屬性: 1、得到所有屬性: 類變數.getDeclaredFeilds(); 2、得到所有公有屬性: 類變數.getFeilds(); 3、得到單個公有的屬性: 1、類變數.getFeild("name");//引數放屬性的名字 2、屬性物件.set(物件,"");//第一個是你用反射得到的obj物件,第二個是你要賦的值 3、直接輸出物件 8、獲取方法: 1、得到所有方法: 類變數.getDeclaredMethods(); 2、得到所有公有的方法: 類變數.getMethods(); 3、得到單個公有的、無參的方法,並呼叫: 1、類變數.geMethod("方法名"); 2、得到物件,通過類變數.getConstrustor().newInstance(); 3、用方法變數.invoke(物件); 4、呼叫單個私有的、有參的方法,並呼叫: 1、類變數.getMethod("方法名",引數型別.class); 2、去掉許可權 方法變數.setAccessible(true); 2、得到物件,類變數.getConstrustor().newInstance(); 3、類變數.invoke(物件,"傳入引數的值"); 9、利用反射呼叫主方法: 1、得到Class類變數: Class.froName("包名+類名"); 2、得到Method物件: 類變數.geMethod("main","String[].class"); 3、獲得一個obj物件: 類變數.getConstrustor().newInstance(); 4、Method物件.invoke(obj物件,"");???????????????????????????????????????????????/找程式碼看看 10、利用反射忽略泛型的定義: 1、確定泛型是String型別 2、得到list的.class檔案: list.getClass(); 3、得到Method物件: 類變數.geMethod("add",Object.class); 4、接著就可以新增int型別的值了。 5、關鍵點: 1、必須使用forEach迴圈輸出,而且型別該為Object。 11、利用反射得到指定動物的play方式 1、首先定義Dog、Cat類,都繼承Pet這個父類,重寫play方法 2、定義一個工廠類:返回一個物件,而返回那個物件依賴傳入的value值 1、public Object getObject(String value){ //得到.class檔案 Class cl12=Class.forName(value); //得到一個物件 Object obj=cl12.getConstrustor().newInstance(); return obj; } 3、在utils包裡新建一個ConfigManager類,方法跟以前那個一模一樣,就是獲取屬性檔案裡的值getValue(String key);