1. 程式人生 > >jdbc之反射基礎

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);