获取配置文件的方式
使用类加载器ClassLoader
1.获取字节码文件对应的类加载器ClassLoader
class名.class.getClassLoader()
2.返回资源对应的字节流
类加载器对象.getResourceAsStream("配置文件")
案例程序:
类1
package junit.reflects;
public class Class01Eat {
public Class01Eat() {
}
public void eatMethod(){
System.out.println("吃饭!!!");
}
}
类2
package junit.reflects;
public class Class02Sleep {
public Class02Sleep() {
}
public void sleepMethod(){
System.out.println("睡觉了!!!");
}
}
配置文件:
使用类1:
className=junit.reflects.Class01Eat
methodName=eatMethod
调用主程序:
package junit.reflects;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Properties;
public class TestClass {
public static void main(String[] args) throws Exception {
Properties pro = new Properties();//创建properties对象,用于盛放外部引入的类名和类的成员方法
//引入配置文件
//1.创建类加载器
ClassLoader cl = TestClass.class.getClassLoader();//
//2.根据类加载器,获取配置文件,并转化为IO字节流
InputStream In = cl.getResourceAsStream("pro.properties");
//将读取的IO字节流数据放入Properties集合中
pro.load(In);
//根据键值对,获取类名和成员方法名
String className = pro.getProperty("className");
String methodName = pro.getProperty("methodName");
//获取class对象
Class c1= Class.forName(className);
//使用构造方法,创建对象
Constructor con = c1.getConstructor();
Object obj = con.newInstance();
//获取成员方法,根据对象使用方法
Method m = c1.getMethod(methodName);
m.invoke(obj);
}
}
使用类2:
className=junit.reflects.Class02Sleep
methodName=sleepMethod
package junit.reflects;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Properties;
public class TestClass {
public static void main(String[] args) throws Exception {
Properties pro = new Properties();//创建properties对象,用于盛放外部引入的类名和类的成员方法
//引入配置文件
//1.创建类加载器
ClassLoader cl = TestClass.class.getClassLoader();//
//2.根据类加载器,获取配置文件,并转化为IO字节流
InputStream In = cl.getResourceAsStream("pro.properties");
//将读取的IO字节流数据放入Properties集合中
pro.load(In);
//根据键值对,获取类名和成员方法名
String className = pro.getProperty("className");
String methodName = pro.getProperty("methodName");
//获取class对象
Class c1= Class.forName(className);
//使用构造方法,创建对象
Constructor con = c1.getConstructor();
Object obj = con.newInstance();
//获取成员方法,根据对象使用方法
Method m = c1.getMethod(methodName);
m.invoke(obj);
}
}