Java反射案例
需求
写一个“框架”,可以帮我们创建任意类的对象,并且执行其中任意方法
步骤
1.将需要创建的对象的全类名和需要执行的方法定义在配置文件中
2.在程序中加载读取配置文件
3.使用反射技术来加载类文件进内存
4.创建对象
5.执行方法
class anlifanshe {
public static void main(String[] args) throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
Properties pro = new Properties(); // 创建Properties对象 为了读取配置文件
// ClassLoader classLoader = anlifanshe.class.getClassLoader();//获取文件的类加载器 实现找到配置文件的路径
// InputStream resourceAsStream = classLoader.getResourceAsStream("pro.properties"); //获得配置文件的输入流
FileInputStream resourceAsStream = new FileInputStream("D:\\JAVA\\src\\newlearn\\pro.properties");
pro.load(resourceAsStream); //加载配置文件
//获取配置文件中定义的数据
String className = pro.getProperty("className");
String methodName = pro.getProperty("methodName");
//加载该类进内存
Class aClass = Class.forName(className);
//创建对象
Object obj = aClass.newInstance();
//获取方法对象
Method method = aClass.getMethod(methodName);
//执行方法
method.invoke(obj);
}
}
import java.util.Objects;
public class Person {
private String name;
private int age;
public String school;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", school='" + school + '\'' +
'}';
}
public void eat(){
System.out.println("开饭了!!!");
}
public void eat(String food){
System.out.println("开饭了!!! 今天吃"+food);
}
}
配置文件中代码: (文件格式为.properties)
className=Learn.Person
methodName=eat