Perf4j @profiled аннотация для частного метода

1

Я добавил аннотацию @Profiled для общедоступного и частного метода. Я могу просмотреть журналы времени для общедоступных методов. Но нет временных журналов для частных методов.

Я правильно выполнил настройки.

@Profiled
public BigInteger nextPrime() {
    currentPrime = currentPrime.nextProbablePrime();
    return currentPrime;
}

@Profiled
private void test()
{
    try{
    Thread.sleep(100);
    }catch(Exception e)
    {
       e.printStackTrace();
     }
}

Является ли @profiled аннотация, применимая только к общедоступным методам?

Теги:
spring
perf4j

2 ответа

2

Скорее всего, вы сконфигурировали perf4j с Spring AOP, и поскольку прокси-серверы Spring AOP не вызывается, когда метод вызван изнутри того же класса (как в вашем случае с помощью метода test), статистика производительности не будет записана.

Проверьте это сообщение в блоге, в котором объясняются ловушки Spring AOP

Одним из решений вашей проблемы было бы использовать AspectJ с perf4j, поскольку AspectJ может справиться с такой ситуацией

0

Да. Это ограничение Spring АОП:

При использовании прокси следует применять аннотации только к методам с общедоступной видимостью. Если вы аннотируете защищенные, частные или видимые с помощью пакетов методы с этими аннотациями, ошибка не возникает, но аннотированный метод не отображает настройки кэширования. Рассмотрим использование AspectJ (см. Ниже), если вам нужно аннотировать непубличные методы, поскольку он изменяет сам байт-код ".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню