【问题标题】:Perf4j @profiled annotation for private method私有方法的 Perf4j @profiled 注释
【发布时间】:2014-05-28 09:12:40
【问题描述】:

我为公共和私有方法添加了@Profiled 注释。我可以看到公共方法的计时日志。但是私有方法没有计时日志。

我做了正确的配置。

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

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

@profiled 注解是否仅适用于公共方法?

【问题讨论】:

    标签: java spring perf4j


    【解决方案1】:

    您很可能已经使用 Spring AOP 配置了 perf4j,并且由于从同一类内部调用方法时不会调用 Spring AOP 代理(如您使用 test 方法的情况),因此不会记录任何性能统计信息。

    查看 this 博客文章,其中解释了 Spring AOP 的陷阱

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

    【讨论】:

      【解决方案2】:

      是的。这是 Spring AOP 的限制:

      使用代理时,您应该只将注释应用到 公开可见的方法。如果您确实注释了受保护的,私有的 或带有这些注释的包可见方法,不会引发错误, 但是带注释的方法没有显示配置的缓存 设置。如果需要,请考虑使用 AspectJ(见下文) 注释非公共方法,因为它会更改字节码本身。”

      【讨论】:

        猜你喜欢
        • 2011-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-28
        相关资源
        最近更新 更多