获取项目地址的方式

1.Thread.currentThread().getContextClassLoader();// 当前线程的类加载器

2.Test.class.getClassLoader();// 当前类的类加载器

3.ClassLoader.getSystemClassLoader();// 系统初始的类加载器

4.

了解过openfire应该对ClassLoader有比较深的理解。

打个简单的比方,你一个WEB程序,发布到Tomcat里面运行。
首先是执行Tomcat org.apache.catalina.startup.Bootstrap类,这时候的类加载器是ClassLoader.getSystemClassLoader()。
而我们后面的WEB程序,里面的jar、resources都是由Tomcat内部来加载的,所以你在代码中动态加载jar、资源文件的时候,首先应该是使用Thread.currentThread().getContextClassLoader()。如果你使用Test.class.getClassLoader(),可能会导致和当前线程所运行的类加载器不一致(因为Java天生的多线程)。
Test.class.getClassLoader()一般用在getResource,因为你想要获取某个资源文件的时候,这个资源文件的位置是相对固定的。

建议楼主去查看一下openfire或者tomcat内部的源码,对ClassLoader会有比较深的理解。
在openfire里面,openfire使用的类加载器,以及每个插件使用的类加载器都不一样。

posted @ 2016-05-12 19:19  zuiaiyezi  阅读(190)  评论(0编辑  收藏  举报