编程知识 cdmana.com

Chargeur de classe 1 Tomcat

                                            Fig.1 tomcatChargeur de classe

Le processus de débogage utilise tous les paramètres par défaut,D'autres circonstances ne sont pas prises en considération pour le moment.

 javaLe chargeur de classe suit le mécanisme de délégation parentale,Raisons:Cela permet de maintenir une priorité,GarantiejavaLes classes de base de ne pas être écrasées.
MaistomcatSur cette base,J'ai encore personnalisé mon chargeur de classe.Raisons:

1. DémarragetomcatElle a besoin de--Application ClassLoader;
2. tomcatDépendance supplémentaire nécessitant une personnalisation--Catalina ClassLoader(Ce que je comprends, c'est quetomcatLes fonctions sont personnalisées);
3. PourwebL'application charge quelques ressources publiques--Shared ClassLoader;
4. Pour CatalinaClassLoader Et Shared ClassLoader Charger les ressources publiques-- Common ClassLoader;
5. webApplication( C'est - à - dire qu'il est déployé wabapps Applications dans le Répertoire ) Un environnement dépendant est également nécessaire --WebAppClassLoader;
Copier le Code

Il y a quelques points à noter ici.

1. Sous paramètres par défaut ,Bien quetomcat Appelé dans le code source Thread.currentThread().setContextClassLoader(catalinaLoader);  Maistomcat Le chargeur de classe réel lui - même est Application ClassLoader( Parce que par défaut ,CatalinaClassLoader Aucune ressource supplémentaire chargée , Donc, pour l'instant, );

Peut être vérifié par le code suivant :

Fig.2 Inweb Appel en application Thread.currentThread().getContextClassLoader().getParent().getParent().loadClass("org.apache.catalina.startup.Catalina")Partomcat Le mécanisme de chargement de classe de : Thread.currentThread().getContextClassLoader().getParent().getParent() Le chargeur de classe qui en résulte est  Application ClassLoader

2. SpringbootIntégrétomcat Mécanisme de chargement de classe utilisé , Avec le déploiement webapps Différents mécanismes de chargement de classe sont utilisés dans le Répertoire ( Plus tard. ) 

3.ParallelWebappClassLoader Bien qu'il s'agisse d'un chargeur de classe personnalisé , Mais ça correspond. Java De la délégation parentale , Ou un mécanisme sélectif de délégation parentale 
Copier le Code

              Fig.3 ParallelWebappClassLoaderHéritéWebappClassLoaderBase

               Fig.4 ParallelWebappClassLoaderHéritéWebappClassLoaderBase

Afin de vérifier que 3Point:

*IntomcatDans le code sourceCatalina.javaNouveauhi()Méthodes;

* En préparation web Ajouter le même chemin dans l'application Catalina.java

* En préparation web Appel de réflexion dans l'application Catalina.hi()Méthodes, Les résultats sont imprimés tomcat Résultat de l'appel de méthode dans le code source

Fig.5 Validation

版权声明
本文为[Codercolinhan]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/09/20210914164725476v.html

Scroll to Top