私有方法的Perf4j @profiled注释

时间:2014-05-28 09:12:40

标签: java spring perf4j

我为公共和私人方法添加了@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 个答案:

答案 0 :(得分:2)

很可能你已经使用Spring AOP配置了perf4j,并且因为当从同一个类内部调用方法时(例如使用test方法)调用方法时不会调用Spring AOP代理,因此不会有性能统计信息记录。

查看解释Spring AOP陷阱的this博客文章

问题的一个解决方案是将AspectJ与perf4j一起使用,因为AspectJ可以处理这种情况

答案 1 :(得分:0)

是。它是Spring AOP的限制:

  

使用代理时,您应该仅应用您的注释   公众可见度的方法。如果你注释protected,私有   或带有这些注释的包可见方法,不会引发错误,   但带注释的方法不会显示已配置的缓存   设置。如果需要,请考虑使用AspectJ(见下文)   注释非公共方法,因为它改变了字节码本身。“