首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

tomcat 七 源码分析-2 类加载ClassLoader

2012-09-22 
tomcat 7 源码分析-2 类加载ClassLoadertomcat 7 源码分析-2 类加载ClassLoader??定义了类加载器后,在init

tomcat 7 源码分析-2 类加载ClassLoader
tomcat 7 源码分析-2 类加载ClassLoader

?

tomcat 七 源码分析-2 类加载ClassLoader
    tomcat 七 源码分析-2 类加载ClassLoader
      tomcat 七 源码分析-2 类加载ClassLoader

        ?定义了类加载器后,在init()中加载

        ?

        tomcat 七 源码分析-2 类加载ClassLoader
          tomcat 七 源码分析-2 类加载ClassLoader
            Thread.currentThread().setContextClassLoader(catalinaLoader); SecurityClassLoad.securityClassLoad(catalinaLoader); // Load our startup class and call its process() method if (log.isDebugEnabled()) log.debug("Loading startup class"); Class<?> startupClass = catalinaLoader.loadClass ("org.apache.catalina.startup.Catalina"); Object startupInstance = startupClass.newInstance(); // Set the shared extensions class loader if (log.isDebugEnabled()) log.debug("Setting startup class properties"); String methodName = "setParentClassLoader"; Class<?> paramTypes[] = new Class[1]; paramTypes[0] = Class.forName("java.lang.ClassLoader"); Object paramValues[] = new Object[1]; paramValues[0] = sharedLoader; Method method = startupInstance.getClass().getMethod(methodName, paramTypes); method.invoke(startupInstance, paramValues); catalinaDaemon = startupInstance;

            ?这里要说的是

            ?

            Class.forName()和ClassLoader.loadClass()的区别?

            这两个方法由给类名作为参数,动态的定位并且加载类。然而,两者行为的区别在于用哪个加载器(java.lang.ClassLoader)去加载和加载完后的类是否就已经初始化。

            对于Class.forName()最常见的形式就是用一个单独的String为参数,使用当前调用者的类加载器。这个类加载器加载代码执行forName()方法。比较ClassLoader.loadClass(),它是一个实例方法,需要你去选择确定的classloader。这个类加载器可以是也可以不是当前加载器。如果选择一个特定的类加载器对你的设计尤为重要,你可以使用ClassLoader.loadClass()或者三个参数的forName()。

            更进一步,Class.forName()的常见形式会初始化加载的类。这样做的就是执行了类的静态初始化方法,也就是byte代码对应的所有静态初始化表达式。这和ClassLoader.loadClass()是不同的,ClassLoader.loadClass()直到类第一次使用的时候才初始化。

热点排行