2016-04-06 1 views
1

Quel est le but principal du Transformer dans l'instrumentation java. Je sais qu'ils doivent être ajoutés à l'instance d'instrumentation. De plus dans la méthode premain, quels paramètres sont affectés à agentArgs dans public static void premain(String agentArgs, Instrumentation inst);Transformateur dans l'instrumentation Java

Répondre

1

Transformateurs (java.lang.instrument.ClassFileTransformer) sont utilisés pour transformer les fichiers de classe au niveau du code octet avant d'être chargés dans la machine virtuelle Java. Cette fonctionnalité peut être utilisée pour modifier les méthodes au niveau des octets (en fait, vous obtenez un tableau d'octets) ou en utilisant une bibliothèque tierce comme Javassist ou ASM où Javassist se trouve sur une couche de modification supérieure (vous pouvez fournir le code source compilé pendant l'exécution). ASM fonctionne avec les mots-clés bytecode (c'est-à-dire invokevirtual).

La modification des classes et de ses entrées pendant le temps de chargement est utilisée dans les Frameworks populaires comme AspectJ pour fournir la possibilité de charger des aspects (c'est ce que l'on appelle "loadtime-weaving").


Le paramètre agentArgs dans le procédé premain(...) est un String contenant les paramètres que lorsque donnée à l'agent au démarrage. C'est un String qui doit être analysé par l'agent lui-même.

Vous pouvez fournir un pour l'agent comme celui-ci:

$ java -javaagent:${jarfile}=${agentArgs} 

La valeur que vous entrez comme ${agentArgs} sera la valeur du paramètre agentArgs.

Pourquoi est-il appelé args s'il contient seulement un argument? Dieu seul le sait.

+0

Merci pour la réponse. Pourriez-vous me dire ce que contient AgentArgs? Je veux dire la valeur de la chaîne de – FAZ

+0

@FAZ J'ai mis à jour ma réponse pour le rendre clair. La valeur que vous donnez à '$ {agentArgs}' sera la valeur du paramètre 'agentArgs'. –