反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的
那么我们现在来讲讲反射的应用—构建具有一定类似框架功能,以此来看看反射的优越性
首先创建一个properties文件,例如我的叫da.properties(也称为配置文件)(注意创建的properties文件要放在该项目的src文件直属目录下,不能放在对应包下,否者会报错),再在该配置文件中写下简单的键值对例如
classname=fzjcdt.bfg
method=dd
键无所谓,值的话,看你要进行的操作是什么,比如说我要通过这整个代码去执行某个类的某个方法,即值设为那个类的全类名,和方法名
其他代码如下
package reflect;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;
public class da {
public static void main(String[] args) throws Exception {
//加载配置文件
Properties s=new Properties();
ClassLoader classLoader = da.class.getClassLoader();//获取da类的类加载器对象
InputStream s1 = classLoader.getResourceAsStream("da.properties");//同过da类的类加载器路径获取这个文件的输入流
s.load(s1);//按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。
// 获取配置文件中定义的数据
// 用指定的键在此属性列表中搜索属性。
String classname = s.getProperty("classname");//返回要加载的类的全类名
String mothod = s.getProperty("method");//返回要加载的类的方法名
//加载该类进内存
Class s2 = Class.forName(classname);//返回该类的class对象
Object o = s2.newInstance();//新建对象
Method method = s2.getMethod(mothod);//返回该方法的对象
method.invoke(o);//执行方法
}
}