浏览 2577 次
锁定老帖子 主题:你知道你的类是从哪个文件中装载的吗?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-10
由于项目用到的Jar包或者Classpath内容较多,经常出现同时装载两份Class的情况,今天恰好在浏览时看到如下代码: public class Whoami { /** public static void which(Class aClass) throws Exception { 输出如下: file:/D:/Applications/Workspaces/JBossTools/registration/build/classes/ 检查你用的类到底是从哪个Jar包或者目录下装载的,这样以后类似问题也多了一个诊断的手段!哈哈哈 如果你怀疑你用的类的版本,那么请用这个方法吧! 参考文章: http://www.0xcafefeed.com/2008/05/where-was-this-class-loaded-from/
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-01-10
我遇到这样的问题了,感觉同样是classpathload的两个同名同目录类,那个jar包牌在操作系统文件列表的前面,先装载哪个类
|
|
返回顶楼 | |
发表时间:2009-01-11
要想能清楚类加载的是哪个包中的类要弄清楚两个方面:
1、类加载器的原理; 2、容器或框架的加载机制; 一般业务代码都是AppClassLoader或其子类加载的,如果同一个类两次加载的加载器在同一个分支通路上,那么就只有最上面加载的那个类,不存在加载两个类的情况。如果处于不同的分支,不同的加载器就得到不同的两个类 |
|
返回顶楼 | |
发表时间:2009-01-11
在使用OSGi时估计会遇到无法确定加载哪个包的类的情况的,这是后打印一下也有好处。
|
|
返回顶楼 | |
发表时间:2009-01-11
this.getClass().getResource("."); // 或 this.getClass().getResource("/"); 以上代码返回的结果有可能为 classes/ classes/package/Class.class 如果在Web容器下有可能返回 /usr/local/tomcat/bin /usr/local/resin/bin (实际程序部署位置可能是 /webroot/app/),更有甚者会返回 / 或 c:/ (glassfish里好像)。 有时候,尤其是在部署Web应用且不能拿到ServletContext的时候。需要有其它方式获取WEB-INF文件夹的位置。 我们期望的是一种统一的结果 比如 getResource(".")即返回当前class文件路径,getResource("/")即返回 classes/ 路径。可惜在实践过程中并非如此,虽然有比较权宜的解决方式了(判断半天看看有没有classes/出现在路径里),但还是希望有人能提出更为灵巧的解决方法。 |
|
返回顶楼 | |