1. Prefácio
Não vou apresentar a Spring AOP. Eu procurei muito online. Qualquer pessoa que tenha usado a primavera conhece o COO e a AOP da primavera. Frequentemente usamos o COI, mas em nosso próprio sistema, o uso da AOP é quase zero. Exceto por essa pequena função de monitoramento aplicada, os outros não são basicamente usados. Abaixo, o editor resolverá a solução para usar o método de gravação da Spring AOP para executar o tempo. Vamos dar uma olhada se precisar.
2. Solução
1. Métodos tradicionais
O método mais simples e áspero é adicionar o registro de data e hora no início e no final de cada método que precisa de estatísticas e calcular a diferença. O código é o seguinte:
long startTime = System.currenttimemillis (); // Código de negócios Long EndTime = System.CurrentTimEmillis (); System.out.println ("Programa de execução de tempo:" + (EndTime - starttime) + "ms"); // Tempo de execução do programa de saídaEste método requer que o código demorado seja adicionado a muitos métodos estatísticos. Esses códigos não têm nada a ver com o negócio central, mas são repetidos em grandes quantidades e espalhados por toda parte, dificultando a manutenção.
2. Métodos de programação orientada a tangente
Portanto, não é recomendável usar o código de sabor ruim acima. Pensei nisso por um longo tempo e planejei usar as idéias da Spring AOP para concluir essa função. Sem mais delongas, o código e as explicações relacionadas são as seguintes:
importar org.apache.commons.logging.log; importar org.apache.commons.logging.logfactory; importar org.aspectj.lang.proedingJoinPoin; importar org.aspectj.lang.annotation.around; importar org.aspectj.lang.annotation.aspect; importar org.aspectj.lang.reflect.methodSignature; importar org.springframework.stereotype.component;/*** Classe de faceta de primavera demorada para execução do método de detecção* Usando a classe anotada por @aspect, a primavera o tratará como um feijão especial (uma seção), que não é, não será dinamicamente a classe* @author blinkfox* @ logger estático logger = logFactory.getLog (timeIntercept.class); // Um minuto, ou seja, 1000ms private estático final longo One_minute = 1000; // A seção estatística que consome tempo da camada de serviço deve ser final para o tipo de string, as variáveis a serem usadas na anotação podem ser apenas do tipo constante estático public estático final String Point = "Execução (*com.blinkfox.test.service.impl.*.*(..))"; / ** * Execução demorada do método estatístico em torno da notificação circundante * @param junçãoPoint * @return */ @around (Point) Public Object timearound (ProceingJoinPoint Junção) {// Defina os parâmetros necessários para retornar o objeto e obter o método. Objeto obj = null; Objeto [] args = jun juntpoint.getargs (); long startTime = System.currenttimemillis (); tente {obj = jun juntpoint.proeced (args); } catch (throwable e) {Logger.error ("Erros de estatísticas nas notificações surround demoradas de execução", e); } // obtenha o nome do método de execução long endtime = System.currenttimemillis (); MethodSignature Signature = (MethodSignature) junçãoPoint.getSignature (); String MethodName = Signature.GetDecLaringTyPename () + "." + assinatura.getName (); // Imprima informações de consumo de tempo this.printexectime (MethodName, StartTime, Endtime); retornar obj; } /*** Imprima informações demoradas que imprimam a execução do método. Se exceder um determinado tempo, imprima * @param MethodName * @param startTime * @param endtime */ private void PrintExectime (String MethodName, Long StartTime, Long Endtime) {Long Difftime = EndTime - StartTime; if (Difftime> One_Minute) {Logger.warn ("-----" + MethodName + "Método Time de execução:" + DIFFTIME + "MS"); }}} NOTA: Finalmente, você precisa adicionar a configuração exigida pelo AOP no arquivo applicationContext.xml <aop:aspectj-autoproxy/> para que a mola possa reconhecê-la.
Resumir
O exposto acima é sobre o uso da Spring AOP para gravar o tempo de execução. Espero que o conteúdo deste artigo seja de ajuda para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.