自己写的一个小案例,根据这个案例可以熟悉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");
执行结果: