Topic: 请教关于类加载的问题? |
Print this page |
1.请教关于类加载的问题? | Copy to clipboard |
Posted by: xhaopuj Posted on: 2005-06-29 13:31 请教关于类加载的问题? 现在我们有一个应用,就是使用用户上传的类,反射其中的方法,然后在适当的情况下调用其中的方法,问题是:如何把jar、class在运行时、不启动服务器的情况下能够执行操作。 谢谢 |
2.Re:请教关于类加载的问题? [Re: xhaopuj] | Copy to clipboard |
Posted by: bloodwolf Posted on: 2005-06-29 17:33 这个得写一个ClassLoader了(参照URLClassLoader)。按照你们的需求,最好是定义好接口,用户实现接口,动态装载类后并实例化,返回的是定义的接口。不需要使用反射。相对来说,反射比较消耗性能的。 |
3.Re:请教关于类加载的问题? [Re: xhaopuj] | Copy to clipboard |
Posted by: 剑过无痕 Posted on: 2005-07-15 16:32 1、定义接口,和基类DBOperation实现接口,申明public方法 2、String className = "com.whcyit.common.taglib.DBOperation"; public DBOperation buildInstance() throws Exception { DBOperation impl = null; try { Class clazz = Class.forName(className); impl = (DBOperation) clazz.newInstance(); } catch (ClassNotFoundException e) { throw new Exception("无效类名: " + className + ", " + e.toString()); } catch (InstantiationException e) { throw new Exception("不能创建类实例: " + className + ", " + e.toString()); } catch (IllegalAccessException e) { throw new Exception("不能创建类: " + className + ", " + e.toString()); } catch (ClassCastException e) { throw new Exception( "无效类类型, " + className + " 不能实现 " + DBOperation.class.getName()); } return impl; } 3、通过impl调用 |
4.Re:请教关于类加载的问题? [Re: xhaopuj] | Copy to clipboard |
Posted by: wonderfuture Posted on: 2005-09-01 15:44 你可以自定义类加载器,也可以使用URLClassLoader作为替代,不过bloodwolf的建议很对,有时接口绑定实现比反射实现要高效的多,反射的额外成本在于动态的标识匹配过程,如果一个方法的执行周期很长,反复调用的次数很少,那么发射就是值得的。 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |