天天看點

JAVA反射-反射的使用初體驗 (java反射入門)1.情景介紹2.實作思路介紹3.具體實作與測試4.完成

1.情景介紹

在java程式中,不改變代碼的情況下,如何實作對象的建立和方法的調用?

而且方法的調用還是可配置的?即,通過修改配置檔案的方式來改變代碼中對象調用的方法?

想要完成上述的需求,就需要使用反射進行編碼了。

2.實作思路介紹

1.建立一個配置檔案,檔案中指定要建立的對象的全類名,并指定要建立的方法名。

2.建立對應的類,并完善類中的方法;

3.在代碼中讀取配置檔案中的内容,建立對象,并調用指定的方法。

3.具體實作與測試

3.0 項目目錄

此處應該特别注意配置檔案的位置和代碼的包的結構。
JAVA反射-反射的使用初體驗 (java反射入門)1.情景介紹2.實作思路介紹3.具體實作與測試4.完成

3.1 建立一個 application.properties 配置檔案

# 類的全路徑
class-full-path = com.northcastle.firstexpirence.Cat
# 方法名
method-name = hi
           

3.2 建立對應的類

package com.northcastle.firstexpirence;

public class Cat {
    private String name;

    public Cat() {
    }

    public Cat(String name) {
        this.name = name;
    }
	//方法1
    public void hi(){
        System.out.println("hi,this is method hi()");
    }
	//方法2
    public void mi(){
        System.out.println("mi,this is method mi()");
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                '}';
    }
}

           

3.3 編寫代碼進行反射的使用(核心)

package com.northcastle.firstexpirence;

import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;

public class Application {
    public static void main(String[] args) throws Exception {

        //1.讀取properties配置檔案
        Properties properties = new Properties();
        FileInputStream fileInputStream = new FileInputStream("src\\application.properties");
        properties.load(fileInputStream);
        String classFullPath = properties.getProperty("class-full-path");
        String methodName = properties.getProperty("method-name");

        //2.建立配置檔案中指定類的對象
        Class clazz = Class.forName(classFullPath);
        Object o = clazz.newInstance();

        //3.調用配置檔案中指定的方法
        Method method = clazz.getMethod(methodName);
        method.invoke(o);

    }
}

           

3.4 執行結果

此方法是 配置檔案中指定的 方法 hi !
hi,this is method hi()
           

4.完成

Congratulations!

You are one step closer to success!