diff --git a/sentinel-extension/sentinel-annotation-aspectj/src/main/java/com/alibaba/csp/sentinel/annotation/aspectj/AbstractSentinelAspectSupport.java b/sentinel-extension/sentinel-annotation-aspectj/src/main/java/com/alibaba/csp/sentinel/annotation/aspectj/AbstractSentinelAspectSupport.java index 2c5c419b..30f5bbaf 100644 --- a/sentinel-extension/sentinel-annotation-aspectj/src/main/java/com/alibaba/csp/sentinel/annotation/aspectj/AbstractSentinelAspectSupport.java +++ b/sentinel-extension/sentinel-annotation-aspectj/src/main/java/com/alibaba/csp/sentinel/annotation/aspectj/AbstractSentinelAspectSupport.java @@ -47,24 +47,29 @@ public abstract class AbstractSentinelAspectSupport { protected Object handleBlockException(ProceedingJoinPoint pjp, SentinelResource annotation, BlockException ex) throws Exception { + return handleBlockException(pjp, annotation.fallback(), annotation.blockHandler(), annotation.blockHandlerClass(), ex); + } + + protected Object handleBlockException(ProceedingJoinPoint pjp, String fallback, String blockHandler, + Class[] blockHandlerClass, BlockException ex) throws Exception { // Execute fallback for degrading if configured. Object[] originArgs = pjp.getArgs(); if (isDegradeFailure(ex)) { - Method method = extractFallbackMethod(pjp, annotation.fallback()); + Method method = extractFallbackMethod(pjp, fallback); if (method != null) { return method.invoke(pjp.getTarget(), originArgs); } } // Execute block handler if configured. - Method blockHandler = extractBlockHandlerMethod(pjp, annotation.blockHandler(), annotation.blockHandlerClass()); - if (blockHandler != null) { + Method blockHandlerMethod = extractBlockHandlerMethod(pjp, blockHandler, blockHandlerClass); + if (blockHandlerMethod != null) { // Construct args. Object[] args = Arrays.copyOf(originArgs, originArgs.length + 1); args[args.length - 1] = ex; - if (isStatic(blockHandler)) { - return blockHandler.invoke(null, args); + if (isStatic(blockHandlerMethod)) { + return blockHandlerMethod.invoke(null, args); } - return blockHandler.invoke(pjp.getTarget(), args); + return blockHandlerMethod.invoke(pjp.getTarget(), args); } // If no block handler is present, then directly throw the exception. throw ex;