2017-03-20 5 views
0

Je veux intercepter la méthode loadClass de ClassLoader. Afin de montrer le processus de chargement de la classe par ClassLoader. Mais je ne connais pas le principe de fonctionnement d'aspectj. Il peut modifier le code source du JDK?Le support AspectJ modifie-t-il le bytecode JDK?

Répondre

1

Vous pouvez simplement utiliser un débogueur et parcourir le processus afin de le comprendre. AspectJ peut tisser des aspects dans des fichiers de classe existants pendant la compilation (CTW, tissage à la compilation) ou pendant le chargement de classe (LTW, tissage à temps de chargement).

LTW ne fonctionne pas pour les classes JDK car ces classes sont toujours chargées avant l'agent de tissage. Vous avez donc un problème d'amorçage. Ce que vous pouvez faire, cependant, est d'appliquer CTW aux fichiers de classe dans, par exemple, ce que vous pouvez faire. rt.jar de votre distribution JRE/JDK, zippez les fichiers de classe tissés dans un autre fichier JAR et remplacez-le par le fichier original. Ensuite, si vous démarrez la JVM avec aspectjrt.jar sur le chemin de classe de démarrage, vous voyez les aspects en action. Je l'ai déjà fait et cela fonctionne. Mais vraiment, ce n'est pas ce pour quoi AspectJ a été conçu. Mais vous avez demandé, alors je vous ai dit. C'est un sujet très avancé cependant, et je doute que ce soit la route que vous devriez prendre en tant que greenhorn AspectJ complet - sans vouloir vous offenser.


Mise à jour: Parce que j'ai posé cette question si souvent, je crée un peu demo project montrant comment tisser des aspects dans le JRE/JDK. Je ne pense toujours pas qu'il est logique de l'utiliser dans des circonstances normales, mais que diable: Pourquoi les gens escaladent le mont Everest? Parce que ça existe. ;-)

+0

J'ai créé un projet de démonstration pour le tissage JDK. Voir ma réponse mise à jour. – kriegaex