Bonjour à tous,
En Java 7, je me pose la question de comment écrire une annotation custom pour exécuter du code avant et après une méthode (l'idée est de chronométrer le temps d'exécution de certaines de mes méthodes).
La méthode classique mais que je trouve redondante est de faire :
(l'exemple ici reste volontairement simple, l'usage de new Date(), getTime() ou même System.out.println n'est pas du tout la question)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public void maMethode() { long debut = new Date().getTime(); // ici le contenu de la méthode System.out.println("Durée : " + new Date().getTime() - debut); }
En réalité, mon cas est un tout petit peu plus compliqué puisqu'il stocke les durées d'exécution des méthodes qui sont appelées plusieurs fois pour n'afficher que leur temps moyen d'exécution à la toute fin de mon programme.
Dans les faits, ça donne quelque chose dans ce genre :
Dans l'idée, je pensais créer une annotation du style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public void maMethode() { startBench("un identifiant quelconque"); // ici le contenu de la méthode stopBench("un identifiant quelconque"); }
et l'utiliser comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Bench { String value(); }
Mais voilà : comment faire en sorte d'exécuter startBench("un identifiant quelconque"); avant d'exécuter ma méthode et stopBench("un identifiant quelconque"); à la fin de ma méthode ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 @Bench("un identifiant quelconque") public void maMethode() { // ici le contenu de la méthode }
Après moults recherches sur le net, impossible de trouver une solution pour ce problème qui me semble pourtant élémentaire...
Je précise que la solution que je recherche concerne une vraie application, pas une "application" web.
J'aimerais idéalement définir une méthode onStart et une méthode onFinish dans mon annotation mais comment faire en sorte qu'elles soient appelées automatiquement ?
Merci d'avance pour votre aide et vos pistes![]()
Partager