反射从配置文件中读取
className=teacher.TTcon_A_count=3con_Args1=intcon_Args2=Stringcon_Args3=intcon_obj1=12con_obj2=zhengcon_obj3=22me_Aa_name=testme_Ab_count=3me_Args1=intme_Args2=Stringme_Args3=intme_obj1=22me_obj2=郑云飞me_obj3=22
?
package hashMap;import java.io.FileInputStream;import java.lang.reflect.*;import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;import java.util.List;import java.util.Properties;/** * @author 郑云飞 * 内容:反射从配置文件中读取信息 * date:2010年9月27日PM */class ReflectTest {@SuppressWarnings("unchecked")public static void main(String[] args) throws Exception{Properties pp=new Properties();List<String> ls=new ArrayList<String>(); pp.load(new FileInputStream("propers.ini"));//加载配置文件内容Iterator<String> it1=(Iterator<String>) pp.propertyNames();while(it1.hasNext()){ls.add(it1.next());//将配置文件里的键存放的容器中}Collections.sort(ls);//对容器进行自然排序String[] s = new String[ls.size()];for(int i=0;i<ls.size();i++){ byte []data=pp.getProperty(ls.get(i)).getBytes("iso8859-1");//设置字符编码 ls.set(i, new String(data,"gb2312"));//为容器ls赋值 s[i]=ls.get(i);//将容器ls复制到字符串数组s中}Class<?> cl = Class.forName(s[0]);//获得要调用的类名Object o = getObject(cl, s);//获得对象invoke(cl, o, s);//通过对象调用方法}//用反射产生对象并返回该对象public static Object getObject(Class<?> cl,String[] args) throws Exception{int con_Count = Integer.parseInt(args[1]);Object o = null;if(con_Count==0){o = cl.newInstance();}else{Class<?>[] con_Args = new Class[con_Count];Object[] obj_Args = new Object[con_Count];Object[] oo = null;for(int i=0;i<con_Count;i++){oo = turn(args[2+i],args[2+i+con_Count]);con_Args[i] = (Class<?>)oo[0];obj_Args[i] = oo[1];}Constructor<?> con = cl.getDeclaredConstructor(con_Args);o = con.newInstance(obj_Args);}return o;}//用反射执行某一方法并返回结果public static Object invoke(Class<?> cl,Object o,String[] args) throws Exception{int con_Count = Integer.parseInt(args[1]);String methodName = args[2+2*con_Count];int me_Count = Integer.parseInt(args[3+2*con_Count]);Class<?>[] me_Args = new Class[me_Count];Object[] me_Obj_Args = new Object[me_Count];Object[] oo = null;for(int i=0;i<me_Count;i++){oo = turn(args[4+2*con_Count+i],args[4+2*con_Count+i+me_Count]);me_Args[i] = (Class<?>)oo[0];me_Obj_Args[i] = oo[1];}Method m = cl.getDeclaredMethod(methodName,me_Args);Object res = m.invoke(o,me_Obj_Args);//System.out.println("方案执行结果:"+res);return res;}public static Object[] turn(String cType,String oArg){Object[] o = new Object[2];if(cType.equals("int")){o[0] = int.class;o[1] = Integer.parseInt(oArg);}if(cType.equals("String")){o[0] = String.class;o[1] = oArg;}if(cType.equals("float")){o[0] = float.class;o[1] = Float.parseFloat(oArg);}if(cType.equals("char")){o[0] = char.class;o[1] = oArg.charAt(0);}if(cType.equals("boolean")){o[0] = boolean.class;o[1] = Boolean.parseBoolean(oArg);}return o;}}class TT{int age;String name;int id;public TT(int age,String name,int id){this.age=age;this.name=name;this.id=id;}public static void test(int age,String name,int id){System.out.println("从配置文件中读取到的方法的信息为:\n"+"年龄="+age+"\t姓名="+name+" 编号="+id);}@Overridepublic String toString(){// TODO Auto-generated method stubreturn "年龄:"+age+"姓名:"+name+"编号:"+id;}}?