Я добавил аннотацию @Profiled
для общедоступного и частного метода. Я могу просмотреть журналы времени для общедоступных методов. Но нет временных журналов для частных методов.
Я правильно выполнил настройки.
@Profiled
public BigInteger nextPrime() {
currentPrime = currentPrime.nextProbablePrime();
return currentPrime;
}
@Profiled
private void test()
{
try{
Thread.sleep(100);
}catch(Exception e)
{
e.printStackTrace();
}
}
Является ли @profiled аннотация, применимая только к общедоступным методам?
Скорее всего, вы сконфигурировали perf4j с Spring AOP, и поскольку прокси-серверы Spring AOP не вызывается, когда метод вызван изнутри того же класса (как в вашем случае с помощью метода test
), статистика производительности не будет записана.
Проверьте это сообщение в блоге, в котором объясняются ловушки Spring AOP
Одним из решений вашей проблемы было бы использовать AspectJ с perf4j, поскольку AspectJ может справиться с такой ситуацией
Да. Это ограничение Spring АОП:
При использовании прокси следует применять аннотации только к методам с общедоступной видимостью. Если вы аннотируете защищенные, частные или видимые с помощью пакетов методы с этими аннотациями, ошибка не возникает, но аннотированный метод не отображает настройки кэширования. Рассмотрим использование AspectJ (см. Ниже), если вам нужно аннотировать непубличные методы, поскольку он изменяет сам байт-код ".