0
Springベースのアプリケーションのパフォーマンスメトリックを収集するためにMethodInterceptorを記述しました。基本的にすべてのサービスクラスといくつかのDAOがこのインターセプタを経由します。私の質問は、リフレクション経由の呼び出しによるパフォーマンスの影響を抑えるために、実行時にこのインターセプタを無効にする方法があるかどうかです。実行時にメソッドインターセプタを無効にする方法
Springベースのアプリケーションのパフォーマンスメトリックを収集するためにMethodInterceptorを記述しました。基本的にすべてのサービスクラスといくつかのDAOがこのインターセプタを経由します。私の質問は、リフレクション経由の呼び出しによるパフォーマンスの影響を抑えるために、実行時にこのインターセプタを無効にする方法があるかどうかです。実行時にメソッドインターセプタを無効にする方法
現代のJVMでリフレクションを使用すると、パフォーマンスが大幅に低下するとは思われません。また、インターセプタを動的に無効にする簡単な方法はないと思います。
邪魔したくないインターセプタで処理を行う場合は、実行時に設定できるプロパティをインターセプタでチェックするのが最も簡単な方法です。このような何か作業をする必要があります:あなたのSpringコンテキストファイルで
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;
}
ます。たとえば、Javaシステムプロパティに基づいて、「バイパス」プロパティを設定するか、設定ファイルからそれを読むことができました。
methodInvocation.proceed()はリフレクションによって呼び出されませんか? – user325643
それは答えの反射のパフォーマンスに関する私のコメントを参照してください。あなたは、反射があなたのケースでパフォーマンスの問題を引き起こしていると思いますか?それを確認するための測定値はありますか? – maximdim