Spring の自動配線とスコープに関するヘルプが必要です。
アプリの基本構造は次のとおりです。
@Componentとして注釈が付けられたCustomHttpClientがあり、application.propertiesファイルから(@Value注釈を介して)いくつかの構成関連のプロパティもプルします。
CustomHttpClient は、アプリケーションのいくつかのサービスで使用されています。CustomHttpClient を使用しているときはいつでも、次の方法でそのインスタンスを自動配線します。
@Autowired private CustomHttpClient httpClient;
次のように、インターセプターを使用して CustomHttpClient 内の変数の一部を変更します。
public class MyInterceptor extends HandlerInterceptorAdapter { @Autowired CustomHttpClient httpClient; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { httpClient.setSomeProperty(newValue); ...
さて、ここで問題です。上記のようにすべてを設定した場合、VM が実行されている限り、インターセプターを介して CustomHttpClient の設定を変更するたびに、その新しい値が他のすべてのクライアントに対して保持されます。したがって、 httpClient.setSomeProperty() を実行すると、その設定が永久に保存されます。別のクライアントからアプリケーションに接続しても。
基本的に私が持っている必要があるのは2つのことです:
- CustomHttpClient のデフォルト設定をインターセプター (リクエストインターセプター、 経由で構成) を介してオーバーライドすることもできます。
- リクエストごとに CustomHttpClient の新しいインスタンスが作成されていることを確認してください (インターセプターがその魔法を実行した後)。
CustomHttpClient のスコープを @Scope("prototype") に変更してみましたが、それでは CustomHttpClient の設定をインターセプターで変更できなくなりました。