Я не верю, что при использовании рефлексии в современной JVM наблюдается значительное снижение производительности. Также я не думаю, что есть простой способ динамически отключить перехватчик.
Если вы выполняете некоторую нетривиальную обработку в вашем перехватчике, которую вы бы хотели избежать, возможно, самый простой способ - это проверить некоторые свойства, которые могут быть установлены во время выполнения, в вашем перехватчике. Примерно так должно работать:
public abstract class BaseInterceptor implements MethodInterceptor {
private boolean bypass;
/**
* If set to true all processing defined in child class will be bypassed
* This could be useful if advice should have flexibility of being turned ON/OFF via config file
* */
public void setBypass(boolean bypass) {
this.bypass = bypass;
}
public final Object invoke(MethodInvocation methodInvocation) throws Throwable {
if (bypass) {
return methodInvocation.proceed();
}
this.logger.debug(">>>");
return onInvoke(methodInvocation);
}
protected abstract Object onInvoke(MethodInvocation methodInvocation) throws Throwable;
}
В вашем контекстном файле Spring вы можете, например, установить свойство 'bypass' на основе системного свойства Java или прочитать его из файла конфигурации.