Java 私有方法的AOP注释
有没有办法让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
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我按照这个说明做了一切,但它不起作用。。。