- 论坛徽章:
- 0
|
本帖最后由 杂食肉鸟 于 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[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;
- }
复制代码 上面这段代码是tomcat的Bootstrap.java中的init()函数的,相信研究过tomcat的人都应该看过这个,我就不再解释了。
我的问题是,既然在Object startupInstance = startupClass.newInstance();这已经获得了Catalina类的实例了,为什么在下面不直接调用那个方法,而要使用反射调用呢? |
|