关于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类的实例了,为什么在下面不直接调用那个方法,而要使用反射调用呢? 大神们不要只看啊,说说你的想法啊。或者我有什么描述不清的地方,你指出来我再详细描述个
页:
[1]