[tomcat7源码学习]结束Bootstrap进入Catalina

结束Bootstrap进入Catalina

Bootstrap中完成所有初始化,正式进入Catalina

1.Bootstrap中的init方法最末尾就是:

paramTypes[0] = Class.forName("java.lang.ClassLoader");
    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;

通过catalinaLoader实例化org.apache.catalina.startup.Catalina,并指定其的parentClassLoadersharedLoader,在Catalina的构造函数中就调用了一个方法,这个方法中的内容为:

SecurityConfig securityConfig = SecurityConfig.newInstance();
securityConfig.setPackageDefinition();
securityConfig.setPackageAccess();

这个里面就为catalina.properties中的package.definitionpackage.access进行初始化

2.回到Bootstrap中的main方法中,如果是启动就执行:

args[args.length - 1] = "start";
daemon.load(args);
daemon.start();

直接调用的Bootstrap中的load方法

3.进入到load中查看

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);

这里就正式进入Catalina中,开始执行load方法。正式结束Bootstrap中的操作

你可能感兴趣的:(tomcat,tomcat7)