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