`
JackyCheng2007
  • 浏览: 249669 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Tomcat 7 源码分析 - 初始化 class loader

阅读更多
Bootstrap 在启动的时候初始化了三种class loader:common,server和shared。在它的createClassLoader方法里面,通过:
String value = CatalinaProperties.getProperty(name + ".loader");

来得到属性文件catalina.properties里面获得他们的配置:
common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar
server.loader=
shared.loader=

可以看出默认情况下指示对common class loader做了配置,而实际上它也是server和shared的父loader。
经过replace${}变量之后得到:
C:\cygwin\home\Administrator\tomcat7/output/build/lib,
C:\cygwin\home\Administrator\tomcat7/output/build/lib/*.jar,
C:\cygwin\home\Administrator\tomcat7/output/build/lib,
C:\cygwin\home\Administrator\tomcat7/output/build/lib/*.jar

把他们split成4个repository,尽管有重复,也没有过滤掉。放入:
List<Repository> repositories = new ArrayList<Repository>();

然后利用工厂来创建:
ClassLoader classLoader = ClassLoaderFactory.createClassLoader
            (repositories, parent);

这个class loader其实是一个URLClassLoader,用来根据URL查找并load类。如果是jar就直接从jar里面找class,如果是dir,就找它下面的jar,然后从jar里面找类。
然后就查找MBServer,这个其实是为管理和监控JVM运行的API。找到后就将这个class loader 注册进去:
mBeanServer.registerMBean(classLoader, objectName);


因为,server和shared的配置都是空,那么他们的class loader都指向了他们的父loader:common loader。 也就是说默认情况下,这3个loader都是common loader。也就是说tomcat会从output/build/lib下面load 类。
这个目录下面有这些jar:


  • 大小: 56.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics