Java 私有方法的AOP注释

Java 私有方法的AOP注释,java,spring,annotations,aop,aspectj,Java,Spring,Annotations,Aop,Aspectj,有没有办法让AOP的注释与私有方法一起工作? 这是一个示例类 public class Foo { @AvgTimeCounted(MY_SPECIAL_COUNTER_ENUM) private void doSomething() { ... } } 这是这个注释的一个方面 @Aspect public class ShardRevertAspect { @Around("@annotation(avgTimeCounted)") public Ob

有没有办法让AOP的注释与私有方法一起工作? 这是一个示例类

public class Foo {
  @AvgTimeCounted(MY_SPECIAL_COUNTER_ENUM)
  private void doSomething() {
     ...
  }
}
这是这个注释的一个方面

@Aspect
public class ShardRevertAspect {

    @Around("@annotation(avgTimeCounted)")
    public Object countTime(ProceedingJoinPoint joinPoint, AvgTimeCounted avgTimeCounted) throws Throwable {
        AverageTimeMetric metricType = avgTimeCounted.value();
        long start = System.currentTimeMillis();
        Object result = joinPoint.proceed();

        MetricsContextManager.addToMetric(metricType, (double) System.currentTimeMillis() - start);
        return result;
    }
}
所以我只是把时间的结果放在一些上下文中

对于AspectJ和Spring,它不适用于私有方法


我有没有别的办法让它发挥作用?我真的需要这种注释。

Spring AOP在默认情况下是基于代理的,因此只能用于非最终
public
受保护的
方法。如果您想要其他东西,您需要使用完整的AspectJ进行加载时或编译时编织。@M.Deinum这种编织在Spring应用程序中使用Spring AOP可以吗?是的,它可以使用任何代码,但会使您的构建或启动过程复杂化。我不想写一个答案并窃取M.Deinum的声誉,他的答案是正确的,他应该写一个。我只想提供相应的链接。注意:到目前为止,文档(current=5.2.2)中有一个bug,它会弄乱索引和格式。我希望它很快会被修复,所以这里是中的,它看起来仍然很好。@kriegaex我按照这个指令做了所有事情,但它不工作……Spring AOP在默认情况下是基于代理的,因此只能在非最终的
public
protected
方法上工作。如果您想要其他东西,您需要使用完整的AspectJ进行加载时或编译时编织。@M.Deinum这种编织在Spring应用程序中使用Spring AOP可以吗?是的,它可以使用任何代码,但会使您的构建或启动过程复杂化。我不想写一个答案并窃取M.Deinum的声誉,他的答案是正确的,他应该写一个。我只想提供相应的链接。注意:到目前为止,文档(current=5.2.2)中有一个bug,它会弄乱索引和格式。我希望它能很快被修复,所以这是一个看起来还不错的地方。@kriegaex我按照这个说明做了一切,但它不起作用。。。