1.情景介紹
在java程式中,不改變代碼的情況下,如何實作對象的建立和方法的調用?
而且方法的調用還是可配置的?即,通過修改配置檔案的方式來改變代碼中對象調用的方法?
想要完成上述的需求,就需要使用反射進行編碼了。
2.實作思路介紹
1.建立一個配置檔案,檔案中指定要建立的對象的全類名,并指定要建立的方法名。
2.建立對應的類,并完善類中的方法;
3.在代碼中讀取配置檔案中的内容,建立對象,并調用指定的方法。
3.具體實作與測試
3.0 項目目錄
此處應該特别注意配置檔案的位置和代碼的包的結構。
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!