自己寫的一個小案例,根據這個案例可以熟悉java反射的一些方法,同時更重要的是能幫助我們理解spring的IOC。
目錄結構:【注:配置文件在src目錄下】
Cat類代碼:
package demo3;
public class Cat {
public void Mi(){
System.out.println("咪咪咪");
}
}
Dog類代碼:
package demo3;
public class Dog {
public void Wang(){
System.out.println("汪汪汪");
}
}
測試類代碼:【代碼註釋完整】
package demo3;
import com.sun.org.apache.bcel.internal.util.ClassLoader;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;
public class Test {
public static void main(String[] args) throws Exception {
// 創建Properties對象
Properties properties = new Properties();
// 創建一個類加載器對象
ClassLoader classLoader = new ClassLoader();
// 將配置文件信息轉換爲字節碼
InputStream in = classLoader.getResourceAsStream("myPro.properties");
// 加載配置文件
properties.load(in);
// 獲取配置文件中的內容
String className = properties.getProperty("className");
String methodName = properties.getProperty("methodName");
// 創建Dog類對象 【從這裏開始就用到了反射的內容】
Class cls = Class.forName("demo3.Cat");
// 獲取一個dog對象
Object object = cls.newInstance();
// 獲取dog中的方法
Method method = cls.getMethod(methodName);
// 執行方法
method.invoke(object);
}
}
配置文件內容:
className = demo3.Cat
methodName = Mi
執行結果:
如果要執行Dog中的方法需要將配置文件中的內容修改爲如下內容,同時將測試類中的Class.forName()修改爲Dog類的全類名:
// 配置文件修改:
className = demo3.Dog
methodName = Wang
//測試類修改:
//創建Dog類對象
Class cls = Class.forName("demo3.Dog");
執行結果: