如果你想对java加载类的机制有比较深入的理解的话,请你花点时间好好阅读一下这篇东西.
这里从三个方面讲述java classloader
1,将从web应用出发模拟一下web应用的classloader(这节是重点)
2,通过测试2实现的classloader来加深理解
3,翻译一下classloader的相关技术文章(来自Core Java第二卷的Chapter 9. Security),由于我的英文水平有限,难免有不合适,请大家指出.
看看怎么实现一个自己的ClassLoader(我们以web应用的classloader为例来讲解 )
大家都很熟悉tomcat,比如我们要写一个servlet运行的话.
1,我们通常会在tomcat的webapps目录下建一个自己的web目录(比如myweb),然后让自己的myweb至少具有以下目录结构.
└─WEB-INF
├─classes
└─lib
2,直接把class文件拷贝到classes目录下,或者把自己做的servet打成jar放到lib下
3,启动tomcat就能访问servlet了.
再说一点:不少人了解struts,也做过基于struts的应用.其实struts对于我们来说只是几个jar而已,我们要在自己的应用中用struts,
只不过就象上面一样把struts的各个lib拷贝到web应用的WEB-INF/lib下就OK了.
再综合前面的基础部分,其实web应用是有自己的classloader的,他专门负责加载WEB-INF/lib和WEB- INF/classes的类。下面我们就来模拟一下web应用的classloader,相信看了下面的代码你就会对classloader的理解又上一个台阶.
view plaincopy to clipboardprint?
import java.io.File;
import java.io.FilenameFilter;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
/*
* web应用的classloader
* 带你步入classloader的天堂
*/
public class WebAppClassLoader{
URLClassLoader myClassLoader = null;
/*
* 用法:new WebAppClassLoader(webRoot)
* 比如:new WebAppClassLoader("c:/web")
&