快速业务通道

Java中利用反射实现类的动态加载 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
t;emp.properties"); //      id = prop.getProperty(idString); //      prop.load(fis); //      fis.close(); prop.load(getTCL().getResourceAsStream("emp.properties")); result=prop.getProperty(header); }catch(Exception e) { System.out.println(e); } return result; } private static ClassLoader getTCL() throws IllegalAccessException, InvocationTargetException { Method method = null; try { method = Thread.class.getMethod("getContextClassLoader", null); } catch (NoSuchMethodException e) { return null; } return (ClassLoader)method.invoke(Thread.currentThread(), null); } //针对消息作出响应,利用反射导入对应的类 public String response(String header,String content,String content2,List list) { String result=null; String s=null; try { /* * 导入属性文件emp.properties,查询header所对应的类的名字 * 通过反射机制动态加载匹配的类,所有的类都被Operator接口隔离 * 可以通过修改属性文件、添加新的类(继承MsgOperator接口)来扩展协议 */ s="org.bromon.reflect."+this.loadProtocal(header).trim(); //加载类 System.out.println("s==="+s);//打印 s===org.bromon.reflect.Success Class c=Class.forName(s); //java.lang.reflect.Methods 是用来描述某个类中单个方法的一个类 //      Method m[] = c.getDeclaredMethods();// //      for (int i = 0; i < m.length; i++)// //        System.out.println(m[i].toString()); // 打印  public java.util.List org.bromon.reflect.Success.act(java.util.List) //创建类的事例 Operator mo=(Operator)c.newInstance(); System.out.println("mo==="+mo); //构造参数列表 Class params[]=new Class[3]; //      params[0]=Class.forName("java.util.List"); params[0]=Class.forName("java.lang.String"); params[1]=Class.forName("java.lang.String"); params[2]=Class.forName("java.util.List"); System.out.println("params[0]==="+params[0]); //      //查询act方法 Method m=c.getMethod("act",params); System.out.println("method=="+m.toString()); Object[] args=new Object[3]; args[0]=content; args[1]=content2; args[2]=list; //      //调用方法并且获得返回 Object returnObject=m.invoke(mo,args);//这个地方出问题了,抛异常~~~~ //      System.out.println("returnObject==="+returnObject); List result2 = (List)returnObject; result = (String)result2.get(0); System.out.println("result2=="+result2); // }catch(Exception e) { System.out.println("Handler-response:"+e); //Handler-response:java.lang.IllegalArgumentException: argument type mismatch //IllegalArgumentException - 如果该方法是实例方法,且指定对象参数不是 声明基础方法的类或接口(或其中的子类或实现程序)的实例; //如果实参和形参的数量不相同;如果基本参数的解包转换失败; 或者如果在解包后,无法通过方法调用转换将参数值转换为相应的形参类型。 } return result; } public static void main(String args[]) { TestReflect tr=new TestReflect(); List list = new java.util.ArrayList(); list.add("测试List"); tr.response("2000","Load1","Lo

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号