2010-12-14 2 views
2

Есть ли способ, с помощью которого я могу сказать Java для отслеживания определенных функций путем маркировки их аннотацией? Я хочу быть в состоянии сделать это:Выполнение трассировки с аннотациями

class Foo { 

    @trace 
    int foo(int bar) { 
     return bar + 5; 
    } 
} 

Затем, если трассировка включена, я получаю:

** Ввод Foo (5)

** Foo возвращающегося: 10

ответ

1

вы можете сделать это с помощью Spring AOP с @Around аннотациями

Как я mplement АОП регистрации:

добавить это applicationContext.xml

<aop:aspectj-autoproxy/> 
    <context:annotation-config/> 
    <context:component-scan base-package="com.company.*"/> 

создать следующий класс в com.company * пакет:.

package com.company.*; 

import org.apache.log4j.Logger; 
import org.aspectj.lang.ProceedingJoinPoint; 
import org.aspectj.lang.annotation.Around; 
import org.aspectj.lang.annotation.Aspect; 
import org.springframework.stereotype.Component; 
import org.springframework.util.StopWatch; 

@Component 
@Aspect 
public class AOPMethodLogger { 

    @Around("bean(*Service)") 
    public Object timeMethod(ProceedingJoinPoint joinPoint) throws Throwable { 
     StopWatch stopWatch = new StopWatch(); 
     stopWatch.start(); 
     Object retVal = joinPoint.proceed(); 
     stopWatch.stop(); 
     if(stopWatch.getTotalTimeMillis() > 35){ 
      StringBuffer logMessageStringBuffer = new StringBuffer(); 
      logMessageStringBuffer.append(joinPoint.getTarget().getClass().getName()); 
      logMessageStringBuffer.append("."); 
      logMessageStringBuffer.append(joinPoint.getSignature().getName()); 
      logMessageStringBuffer.append("("); 
      logMessageStringBuffer.append(joinPoint.getArgs()); 
      logMessageStringBuffer.append(")"); 
      logMessageStringBuffer.append(" execution time: "); 
      logMessageStringBuffer.append(stopWatch.getTotalTimeMillis()); 
      logMessageStringBuffer.append(" ms"); 
      System.out.println(logMessageStringBuffer.toString()); 
     } 
     return retVal; 
    } 

} 
1

Вы можете сделать это без необходимости добавления аннотаций путем используя инструмент под названием InTrace.

ПРИМЕЧАНИЕ. InTrace - это бесплатный инструмент с открытым исходным кодом, который я написал.

Смежные вопросы