首页 新闻 搜索 专区 学院

tomcat源码--启动的时候调用catalina类的load方法为什么要用反射?

0
悬赏园豆:100 [待解决问题]
    private void load(String[] arguments)
        throws Exception {

        // Call the load() method
        String methodName = "load";
        Object param[];
        Class<?> paramTypes[];
        if (arguments==null || arguments.length==0) {
            paramTypes = null;
            param = null;
        } else {
            paramTypes = new Class[1];
            paramTypes[0] = arguments.getClass();
            param = new Object[1];
            param[0] = arguments;
        }
        Method method =
            catalinaDaemon.getClass().getMethod(methodName, paramTypes);
        if (log.isDebugEnabled())
            log.debug("Calling startup class " + method);
        method.invoke(catalinaDaemon, param);

    }

tomcat启动的时候,

Bootstrap init的时候,就已经把Catalina实例化出来了,接下来load的时候为什么还用反射啊?

        Class<?> startupClass =
            catalinaLoader.loadClass
            ("org.apache.catalina.startup.Catalina");
        Object startupInstance = startupClass.newInstance();

        catalinaDaemon = startupInstance;

 

oldwangneverdie的主页 oldwangneverdie | 初学一级 | 园豆:104
提问于:2017-02-27 18:50
< >
分享
所有回答(1)
1

使用反射,可确保其正确访问加载了Catalina.class类文件的类加载器的对应的Cataline实例对象吧。

Catalina.getClass()-->CatalinaClassLoader-->catalina对象。

因为Tomcat包含三个类加载器,使用双亲委派模式。

britrock | 园豆:204 (菜鸟二级) | 2017-03-01 11:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册