用JAVA反射知識寫一個簡單的框架類

  1. 之前學習Spring框架的時候感覺很喫力,主要原因是反射的知識沒有掌握好。今天把反射的知識認真地學了一下,對於框架的實現原理有了更深的認識。

  2. 框架簡單的來說就是一個半成品軟件。這裏要求在不更改框架源碼的情況下,讓框架幫我們自動創建對象、調用方法。簡單分析一下:
    ①首先,既然用戶不能更改框架的源碼,那麼框架想要幫用戶創建用戶所自定義的類的對象,就不能直接“new 用戶自定義的類”,框架是事先寫好的,怎麼會知道用戶到底自己寫了哪些類?總之,就是不能用“new”。
    ②既然不能用new,那隻能用反射了。我們知道,獲取Class對象有3種方式,其中一種方式是Class.forName(“全限定類名”)。注意這裏的全限定類名是字符串,在編譯的時候不會報錯。
    ③於是,可以通過配置文件的方式,把配置文件中全限定類名讀取出來,作爲forName()方法的參數。那麼,就可以獲取一個Class對象了
    ④獲取Class對象之後,就可以調用其中的方法了。當然,方法的名稱也要在配置文件中寫上纔行。

  3. 下面是代碼
    ①用戶自定義的類:

package domain;
public class Student
{
    public void sleep()
    {
        System.out.println("我正在睡覺。。。");
    }
}

②框架類:

package reflect;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

public class ReflectTest
{
    public static void main(String[] args) throws Exception
    {
        Properties properties=new Properties();
        ClassLoader classLoader = ReflectTest.class.getClassLoader();
        InputStream inputStream = classLoader.getResourceAsStream("pro.properties");
        properties.load(inputStream);

        String className = properties.getProperty("className");
        String methodName = properties.getProperty("methodName");

        Class aClass = Class.forName(className);

        Object o = aClass.newInstance();
        Method method = aClass.getMethod(methodName);
        method.invoke(o);

    }

}

  1. 配置文件pro.properties的內容如下:
className=domain.Student
methodName=sleep
  1. 運行結果
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章