1. Préface
Je ne présenterai pas Spring AOP. J'ai beaucoup cherché en ligne. Quiconque a utilisé le printemps connaît le CIO et l'AOP de Spring. Nous utilisons souvent le CIO, mais dans notre propre système, l'utilisation d'AOP est presque nulle. À l'exception de cette petite fonction de surveillance appliquée, les autres ne sont essentiellement pas utilisées. Ci-dessous, l'éditeur triera la solution à l'utilisation de la méthode d'enregistrement Spring AOP pour exécuter le temps. Jetons un coup d'œil si vous en avez besoin.
2. Solution
1. Méthodes traditionnelles
La méthode la plus simple et la plus approximative consiste à ajouter l'horodatage au début et à la fin de chaque méthode qui nécessite des statistiques, puis de calculer la différence. Le code est le suivant:
Long starttime = System.CurrentTimemillis (); // Code commercial Long Fintime = System.CurrentTimemillis (); System.out.println ("Programme Exécution:" + (Fintime - StartTime) + "MS"); // le temps d'exécution du programme de sortieCette méthode nécessite que le code prend du temps à ajouter à de nombreuses méthodes statistiques. Ces codes n'ont rien à voir avec le cœur de métier, mais sont répétés en grande quantité et dispersés partout, ce qui le rend difficile à maintenir.
2. Méthodes de programmation orientée tangente
Par conséquent, il n'est pas recommandé d'utiliser le code de mauvais goût ci-dessus. J'y ai réfléchi pendant longtemps et j'ai prévu d'utiliser les idées de Spring AOP pour remplir cette fonction. Sans plus tarder, le code et les explications connexes sont les suivantes:
import org.apache.commons.logging.log; import org.apache.commons.logging.logfactory; import org.aspectj.lang.proceedingJoinpoint; import org.aspectj.lang.annotation.around; import org.aspectj.lang.annotation.aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.sterreotype.component; / ** * Classe de facettes de printemps qui prend du temps pour l'exécution de la méthode de détection * En utilisant la classe annotée par @aspect, le printemps le traitera comme un bean spécial (une section), c'est-à-dire qu'il ne sera pas dynamiquement proxy la classe elle-même * @Author BlinkFox * @date 2016-07-04 * / @ @ aspect @ componentpublic @date 2016-07-04 * / @ @ aspect @ componentpubic CLASSE CLASSE CLASSECTORS logger = logfactory.getLog (TimeInterceptor.class); // Une minute, c'est-à-dire 1000 ms private statique finale long one_minute = 1000; // La section chronophage statistique de la couche de service doit être finale pour le type de chaîne, les variables à utiliser dans l'annotation ne peuvent être que de type statique statique statique final string Point = "EXECUTION (* com.blinkfox.test.service.impl. *. * (..)"; / ** * Exécution chronophage de la méthode statistique autour de la notification environnante * @param joinpoint * @return * / @around (point) Objet public timearound (procédurejoinpoint joinpoint) {// définir les paramètres requis pour retourner l'objet et obtenir la méthode. Objet obj = null; Objet [] args = joinpoint.getArgs (); Long startTime = System.CurrentTimemillis (); essayez {obj = joinpoint.proceed (args); } catch (Throwable E) {logger.Error ("Erreurs de statistiques dans les notifications surround en temps d'exécution", e); } // Obtenez le nom de la méthode d'exécution Long EndTime = System.CurrentTimemillis (); Methodsignature Signature = (Methodsignature) joinpoint.getSignature (); String MethodName = Signature.getDeclarenTyPename () + "." + signature.getName (); // Imprime les informations longues this.printexectime (MethodName, startTime, Fintime); retour obj; } / ** * Imprimez des informations longues qui impriment l'exécution de la méthode. S'il dépasse un certain temps, imprimez * @param méthodyname * @param starttime * @param endtime * / private void printExectime (String methodname, long starttime, long end time) {long diftime = endtime - starttime; if (difftime> one_minUte) {logger.warn ("-----" + méthode + "Temps d'exécution de la méthode:" + difftime + "ms"); }}} Remarque: Enfin, vous devez ajouter la configuration requise par AOP dans le fichier applicationContext.xml <aop:aspectj-autoproxy/> afin que le printemps puisse le reconnaître.
Résumer
Ce qui précède consiste à utiliser Spring AOP pour enregistrer le temps d'exécution. J'espère que le contenu de cet article sera d'une aide à l'étude ou au travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.