Отслеживание выполнения с аннотациями - PullRequest
2 голосов
/ 14 декабря 2010

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

class Foo {

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

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

** Ввод foo (5)

** Возвращение Фу: 10

Ответы [ 2 ]

1 голос
/ 19 июня 2011

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

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

1 голос
/ 14 декабря 2010

вы можете сделать это, используя spring aop, с аннотациями @Around

Как реализовать ведение журнала AOP:

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

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

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

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;
    }

}
...