0

これは設計上の問題です。私のプロジェクトの構造は次のようなものです。12 のフロントエンド クラス、いくつかのサービス レイヤー クラス、および外部システムに接続する 1 つのバックエンド クラスがあります。Spring を使用して、バックエンド クラス インスタンスを初期化してサービス クラス Bean に挿入し、次にサービス クラス Bean をフロントエンド クラス Bean に (必要に応じて) 挿入します。

フロントエンド クラスは (論理的に) モジュールに分割されます。サービス層とバックエンドは共通です。

ここで、私の要件は、呼び出しを行うフロントエンド クラスのモジュールに基づいて、バックエンド クラス メソッドがフィールドの異なる値を外部システムに送信する必要があることです。

より単純にするために、バックエンド クラスが各メソッド呼び出しで DB に接続する (やや大雑把な) ユースケースを考えてみましょう。モジュール A のフロントエンド クラスによって開始された DB 呼び出しは、常にユーザー名「moduleA」に接続する必要があります。同様に、モジュール B からのすべての呼び出しは、ユーザー名「moduleB」を使用して接続する必要があります。呼び出し元に関係なく、動作自体は共通であることに注意してください。ユーザー名だけが異なる必要があります。

最も簡単な方法は、各フロントエンド クラス Bean にサービス層クラス Bean の独自のコピーを持たせ、それがバックエンド クラス Bean の独自のコピーを持つようにすることです。たとえば、モジュール A のフロントエンド Bean は moduleA サービス Bean を参照し、それは moduleA バックエンド Bean を参照します。この場合、モジュール A のユーザー名をモジュール A のバックエンド Bean に注入できます。同様に、moduleB の一連の Bean 定義 (フロントエンド + サービス + バックエンド) があります。

しかし、それほど多くの Bean 定義を作成したくありません。もう 1 つの簡単な方法は、すべてのメソッドで値をフロントエンドからバックエンドに渡すことです。しかし、これは広範な変化です。Spring を使用するより簡単な方法はありますか?

4

1 に答える 1

0

スレッド ローカルを使用して値を渡すようにしてください (モジュールが同じ JVM 内で実行されている場合)。finally メソッドを使用してサーブレット フィルターのスレッドを消去するように注意してください。

于 2013-06-14T14:49:39.977 に答える