我需要确保特定方法的执行时间小于指定值。我想做一些类似下面的事情
@Around("execution(* com.foo.bar.executeTask2(..))" + " && someExternalParams(500)")
@Around("execution(* com.foo.bar.executeTask(..))" + " && someExternalParams(5)")
public void checkSLA(ProceedingJoinPoint joinPoint, int maxtime) throws Throwable {
//get staarttime
joinPoint.proceed();
// get endtime
if(endtime - starttime > maxtime)
System.out.println("Task took longertime");
}
如何使用 Spring AOP 实现这一目标。一种解决方案是从文件中读取 maxtime。有什么想法吗?
最佳答案
您好,您可以创建一个 @SLA
注释并在您的方面从中读取该值。显然,您必须更改建议以匹配该注释,并使用 @SLA
注释标记所有方法。
这与你的方法有点不同,但我认为为这种方面进行注释会更好。这样,您就不必每次想要处理新方法时都更新切入点。只需在该方法中添加注释即可。请参阅下面的示例。
注释:
@Target(METHOD)
@Retention(RUNTIME)
public @interface SLA {
int maxtime();
}
方面:
@Aspect
public SLAAscpet {
@Around("execution(@com.foo.bar.SLA * *(..))")
public void aroundSLAMethod(final JoinPoint joinPoint) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
SLA annotation = signature.getMethod().getAnnotation(SLA.class)
int maxtime = annotation.maxtime()
...
}
}
用法:
...
@SLA(maxtime=500)
public void someMethodForSLA() {
...
}
...
关于java - 在 Spring 中向 Advice 发送外部参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14691406/