杂食肉鸟 发表于 2014-08-18 15:51

关于Tomcat中的反射机制的问题

本帖最后由 杂食肉鸟 于 2014-08-18 15:51 编辑

/**
   * Initialize daemon.
   */
    public void init()
      throws Exception
    {

      // Set Catalina path
      setCatalinaHome();
      setCatalinaBase();

      initClassLoaders();

      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;
      paramTypes = Class.forName("java.lang.ClassLoader");
      Object paramValues[] = new Object;
      paramValues = sharedLoader;
      Method method =
            startupInstance.getClass().getMethod(methodName, paramTypes);
      method.invoke(startupInstance, paramValues);

      catalinaDaemon = startupInstance;

    }上面这段代码是tomcat的Bootstrap.java中的init()函数的,相信研究过tomcat的人都应该看过这个,我就不再解释了。
我的问题是,既然在Object startupInstance = startupClass.newInstance();这已经获得了Catalina类的实例了,为什么在下面不直接调用那个方法,而要使用反射调用呢?

杂食肉鸟 发表于 2014-08-18 21:38

大神们不要只看啊,说说你的想法啊。或者我有什么描述不清的地方,你指出来我再详细描述个
页: [1]
查看完整版本: 关于Tomcat中的反射机制的问题