使用Spring aop限制并发方法调用

时间:2012-11-22 10:51:32

标签: spring concurrency aop

我想在spring应用程序中限制并发方法调用。

interceptor这个和here使用这个拦截器的例子。 但问题是方法(需要限制)不在bean中,我每次需要调用方法时都会创建新对象。 在这种情况下是否有可能实现限制?

1 个答案:

答案 0 :(得分:2)

您可以使用Load-time weaving with AspectJ并编写一个自定义aspect进行限制。

实施例

@Aspect
public class ThrottlingAspect {
    private static final int MAX_CONCURRENT_INVOCATIONS = 20;
    private final Semaphore throttle = new Semaphore (MAX_CONCURRENT_INVOCATIONS, true);

    @Around("methodsToBeThrottled()")
    public Object profile(ProceedingJoinPoint pjp) throws Throwable {
        throttle.acquire ();
        try {
            return pjp.proceed ();
        }
        finally {
            throttle.release ();
        }
    }

    @Pointcut("execution(public * foo..*.*(..))")
    public void methodsToBeThrottled(){}
}