为什么 Apache tomcat 的 Bootstrap class 调用 ClassLoader.loadclass 而不是 new 运算符?
Why Bootstrap class of Apache tomcat calls ClassLoader.loadclass instead of new operator?
我正在研究 apache tomcat 开源代码,一开始,在 Bootstrap.java 我发现了这个:
Class<?> startupClass = catalinaLoader.loadClass("org.apache.catalina.startup.Catalina");
即使 Bootstrap.java 和这个 Catalina.java 属于同一个包,为什么 Bootstrap(org.apache.catalina.startup) class of apache tomcat调用 ClassLoader.loadclass 加载 Catalina class(org.apache.catalina.startup.Catalina) 然后 class.newInstance,为什么不使用 new 运算符创建 Catalina 实例?
由于代码明确使用 catalinaLoader
并假设它稍后创建了 class 的实例,这是为了确保 Catalina
class 加载了与 Bootstrap
class.
不同的 classloader
有关这意味着什么的更多信息,请参阅有关 class 加载的文档。
我正在研究 apache tomcat 开源代码,一开始,在 Bootstrap.java 我发现了这个:
Class<?> startupClass = catalinaLoader.loadClass("org.apache.catalina.startup.Catalina");
即使 Bootstrap.java 和这个 Catalina.java 属于同一个包,为什么 Bootstrap(org.apache.catalina.startup) class of apache tomcat调用 ClassLoader.loadclass 加载 Catalina class(org.apache.catalina.startup.Catalina) 然后 class.newInstance,为什么不使用 new 运算符创建 Catalina 实例?
由于代码明确使用 catalinaLoader
并假设它稍后创建了 class 的实例,这是为了确保 Catalina
class 加载了与 Bootstrap
class.
有关这意味着什么的更多信息,请参阅有关 class 加载的文档。