J'ai une application utilisant AspectJ avec un tissage du temps de chargement pour conseiller diverses méthodes. J'aimerais placer un interrupteur dans mon programme pour désactiver l'aspect sans avoir à modifier le code source ou à redémarrer le programme. Il faut qu'il y ait le moins de surcharge possible lorsqu'il est désactivé. Merci !
Réponse
Trop de publicités?A ma connaissance, il n'y a aucun moyen de un tisser quelques conseils à partir du bytecode. Si vous travaillez avec un morceau existant de bytecode augmenté, je ne crois pas qu'il y ait un moyen de l'enlever autre que de redémarrer l'application sans le tissage*.
Si vous parlez de mettre les choses en place pour qu'elles puissent être retirées, il est peut-être vrai que le tissage ne peut pas être supprimé mais vous pourriez certainement ajouter un if (useWeavedCode)
vérifier tout cela, et bien sûr ajouter cette variable ainsi que des méthodes pour la modifier de manière appropriée (exposition via JMX, nouvelle commande console, nouvelle page JSP d'administration, etc.) Ensuite, si vous voulez empêcher ce nouveau comportement, vous pouvez le désactiver avec cette nouvelle option.
Notez bien sûr que cela ne supprime pas réellement le code, et entraîne le coût d'un code booléen. pendant qu'il est désactivé, mais je ne pense pas qu'il soit possible de faire mieux que cela.
*En principe, vous devez recharger la classe pour ne pas avoir à redémarrer l'application, mais en pratique, c'est probablement l'option la plus simple qui s'offre à vous, à moins que vous n'ayez préalablement placé des crochets dans les chargeurs de classe.