1. Предисловие
Я не буду вводить Spring AOP. Я много искал в Интернете. Любой, кто использовал Spring, знает IOC Spring's IOC и AOP. Мы часто используем МОК, но в нашей собственной системе использование AOP почти равна нулю. За исключением этой небольшой функции мониторинга, которая применяется, другие в основном не используются. Ниже редактор разместит решение для использования метода записи Spring AOP для выполнения времени. Давайте посмотрим, если вам это нужно.
2. Решение
1. Традиционные методы
Самый простой и грубый метод - добавить метку времени в начале и конце каждого метода, который нуждается в статистике, а затем рассчитайте разницу. Код заключается в следующем:
long startTime = System.CurrentTimeMillis (); // бизнес -код long EndTime = System.CurrentTimeMillis (); System.out.println («Программное время выполнения:» + (EndTime - StartTime) + «MS»); // Время выполнения программы вывода
Этот метод требует, чтобы код, занимающий много времени, был добавлен ко многим статистическим методам. Эти коды не имеют ничего общего с основным бизнесом, но повторяются в больших количествах и разбросаны повсюду, что затрудняет поддержание.
2. Методы ориентированного на касательные программы
Поэтому не рекомендуется использовать приведенный выше код плохого вкуса. Я думал об этом в течение долгого времени и планировал использовать идеи Spring AOP для выполнения этой функции. Без лишних слов код и связанные с ними объяснения следующие:
Импорт org.apache.commons.logging.log; Импорт org.apache.commons.logging.logfactory; Импорт org.aspectj.lang.proceedingjoinpoint; Импорт org.aspectj.lang.annotation.around; Импорт org.aspectj.lang.annotation.aspept; Импорт org.aspectj.lang.reflect.methodsignature; Импорт org.springframework.stereotype.component;/*** Труто-потребляемый класс пружины для выполнения метода обнаружения* Использование класса, аннотируемого @aspect, Spring будет рассматривать его как специальный боб (раздел), то есть, он не будет динамически прокси. Log logger = logfactory.getlog (timeInterceptor.class); // одна минута, то есть 1000 мс частного статического окончательного длинного длинного one_minute = 1000; // Статистический разрез трудоемкого уровня Сервисного уровня должен быть окончательным для типа строки, переменные, которые будут использоваться в аннотации, могут быть только статическим постоянным типом публичного статического конечного строкости = "выполнение (*com.blinkfox.test.service.impl.*.*(..))"; / ** * Труто-потребляющее выполнение статистического метода вокруг окружающего уведомления * @param joinpoint * @return */ @Around (точка) открытый объект rimearound (ход Joinpoint joinpoint) {// Определить параметры, необходимые для возврата объекта и получить метод. Объект obj = null; Object [] args = joinPoint.getArgs (); long starttime = System.currentTimeMillis (); try {obj = joinpoint.proudece (args); } catch (throwable e) {logger.error ("Статистические ошибки в выполнении времени, требующих окружающих уведомлений", e); } // Получить имя метода выполнения long Endtime = System.currentTimeMillis (); Signature methodignaturation = (methodignature) joinpoint.getSignature (); String methodname = signature.getDeclaringTypEname () + "." + signature.getName (); // распечатать много времени информации this.printexectime (MethodName, StartTime, EndTime); вернуть OBJ; } /*** Распечатайте многочастотную информацию, которая печатает выполнение метода. Если он превышает определенное время, печатать * @param methodname * @param starttime * @param endtime */ private void printexectime (строка метод, метод, длинный старт, длинный конец) {long difftime = endtime - starttime; if (difftime> one_minute) {logger.warn ("-----" + methodname + "Время выполнения метода:" + difftime + "ms"); }}} ПРИМЕЧАНИЕ. Наконец, вам необходимо добавить конфигурацию, необходимую AOP в файле applicationContext.xml <aop:aspectj-autoproxy/> чтобы пружина могла его распознавать.
Суммировать
Выше приведено использовать Spring AOP для записи времени выполнения. Я надеюсь, что содержание этой статьи поможет всем, кто учится или работа. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.