2016-08-09 71 views
0

ich durch Apache Tomcat Open-Source-Code gehen, und zu Beginn, in Bootstrap.java fand ich dies:Warum Bootstrap-Klasse von Apache Tomcat ClassLoader.loadclass statt neuen Operator aufrufen?

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

auch wenn Bootstrap.java und diese Catalina.java zum selben Paket gehört, Warum Bootstrap (org.apache.catalina.startup) class of apache tomcat ruft ClassLoader.loadclass auf, um die Catalina-Klasse (org.apache.catalina.startup.Catalina) und dann class.newInstance zu laden. Warum erstellt sie nicht einfach eine Catalina-Instanz mit einem neuen Operator?

+0

Verstehen Sie, wie Classloading und verschiedene Klassenlader funktionieren? – Kayaman

+0

Ich weiß ein bisschen, werde aber gerne mehr hören. – user3690370

Antwort

0

Da der Code explizit catalinaLoader verwendet und später unter der Annahme erstellt eine Instanz der Klasse, dann ist es um sicherzustellen, dass die Catalina Klasse mit einem anderen Klassenlader als die Bootstrap Klasse geladen wird.

Weitere Informationen dazu finden Sie in der Dokumentation zum Laden von Klassen.

+0

Das ist, was meine Frage ist, warum es für Tomcat erforderlich ist, Catalina-Klasse von anderen Klassenlader als die Bootstrap-Klasse zu laden? – user3690370

+0

Das ist zu weit gefasst, um hier zu antworten, aber mit einem eigenen Classloader haben Sie viel mehr Kontrolle über die geladenen Klassen * oder * entladen. Das Laden von Klassen ist ein komplexes Thema. Wenn Sie nach mehr Informationen suchen, sollten Sie sich an Google wenden. – Kayaman