浏览 3527 次
锁定老帖子 主题:Java 动态加载类问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-08-27
有一个接口类 A. 有个动态载入指定类 B. 动态载入类 B 是通过传递一个参数classPath='com.xxx.test.aImpl' 来进行动态加载指定类. DD 发布运行正常. 当将 DD 打包成jar放在 EE 项目下用的时候,出现:java.lang.ClassNotFoundException EE 项目中有 A 接口实现类.调用 B 的动态加载.出现找不到接口 A . 不打包执行正常,打包后就出现错误. /** * 自定义的类加载器 */ public class DynaLoadClass extends ClassLoader { private static String PATH = null; @SuppressWarnings("unchecked") protected Class findClass(String name) throws ClassNotFoundException { try { String classPath = getClassPath(name); FileInputStream fin = new FileInputStream(classPath); File cf = new File(classPath); byte[] raw = new byte[(int) cf.length()]; fin.read(raw); fin.close(); return defineClass(name, raw, 0, raw.length); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return super.findClass(name); } /** * 得到Class的绝对路径 * @param name * @return */ private String getClassPath(String name) { if(PATH == null){ PATH = DynaLoadClass.class.getClassLoader().getResource("").toString() .replace("file:/", "").replace("%20", " "); } return PATH + name.replace('.', File.separatorChar) + ".class"; } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-08-27
最后修改:2012-08-27
你直接Class.forName(com.xx.A),也报错吗?
如果这样能加载A类,那么说明你的发的这段代码有问题。你就直接用Class.forName替换你这段代码 |
|
返回顶楼 | |
发表时间:2012-08-27
当前的CLASS LOADER肯定不对.
建议用ThreadLocal.getClassLoader去加载类 |
|
返回顶楼 | |
发表时间:2012-08-28
关注一下,楼主解决了以后分享一下分析结果
|
|
返回顶楼 | |
发表时间:2012-08-28
抱歉,没注意到帖子了.
问题解决了. http://yangkai0332.iteye.com/blog/1664048 |
|
返回顶楼 | |