tomcat 架构、源码学习(三)

tomcat为什么要用custom自己的Class loader:

           1. 定义自己的class 导入规则。

           2. 缓存先前的class?

           3. 导入的class的初始化动作。

           4. 动态导入,修改后restart Context。

Loader

WebappClassLoader 导入class的过程:

         1. 所有之前被加载过的class都被缓存。找到的缓存在resourceEntries中,未找到的在notFoundResources中。所有第一次加载的时候会从本地cache查找资源。(本地cache就是当前实例)

         2. 如果local cache未找到,则查找其他类加载器的cache,如调用java.lang.ClassLoader.findLoadedClass方法获得的class loader。

         3. 如果都没找到,则调用系统的类加载机制加载类,防止应用中某些类覆盖J2EE中的类。

         4. 进行安全检查,如果有的话。如果该class不允许load则抛出ClassNotFoundException异常。

         5. 如果delegate机制是开启的或者该class的package属于package trigger,则使用parent class loader来载入,如果不存在parent,则用system class loader。

         6. 从当前的repositories中载入该class。

         7. 如果在当前repositories中未找到该class,而且delegate机制是off的,就使用parent class loader载入class,如果parent class loader 是null,则用system class loader。

         8. 如果仍然未找到class,则抛出ClassNotFoundException。


猜你喜欢

转载自doti.iteye.com/blog/1559681