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