0

これは基本的なSpring101のもののようですが、これを行う正しい方法を見つけることができないようです。状況は以下の通りです。私のWebアプリには、外部システムからのユーザーを処理するコントローラーである単一のエントリポイントがあります。POST転送は、そのユーザーに関連する一連の関連情報を含む単なるリクエストです。Aponエントリ、新しいユーザーBeanを作成し、そのユーザー情報をロードする必要があります。さらに、ユーザーが何らかのサービスをトリガーするビューをヒットした場合、そのサービスが適切なユーザーBeanインスタンスにアクセスできるようにする必要があります。

頭に浮かんだこれを行う最初の方法は、Userの新しいインスタンスを作成し、データを入力して、Bean名としてusernameを使用してSpringコンテナに登録するUserManagerサービスを用意することでした。次に、サービスが呼び出されると、サービスは適切なインスタンスFactory.getBean(username)を見つけるようなことをします。Userここで私が見ている問題は、ユーザーとユーザーにUser属するBeanとの間のリンクが失われていることです。さらに、可能な限り、ユーザーがセッションでBeanを持ち歩くことは避けたいと思います。これは、Spring AOPとプロキシを使用することになっている場所ですか?

このタイプの状況を解決するための典型的な春のパターンは何ですか?

4

1 に答える 1

0

それで、今では(この質問をしてから)何週間も経っており、その結果、私の知識レベルは指数関数的に拡大しているので、役立つと思う人のために私の質問に答えたほうがいいと思いました(質問は言うまでもありませんでした)そもそも非常に明確です)。

基本的な答えは次のとおりです。プロキシを使用します。シングルトンは1回しかインスタンス化されないため、たとえば、寿命が短い別のクラスを注入することはできません。セッションスコープ。より多くの情報が必要な場合は、ステートフルBeanとステートレスBeanをチェックアウトしてください。多かれ少なかれ私がやったことはこれです...サービスにはデータを操作するためのSTATELESSコードが含まれています(動詞を考えてください; RegisterUserSvc、AddPartSvcなど)。これらのサービスが操作するデータはステートフルです。たとえば、各ユーザーは独自のデータオブジェクトの独自のコピーを持っています。たとえば、TodoListBeanは、ユーザーごとに異なる状態にあります。

では、サービス、たとえばAddTodoItemServiceは、このデータをどのように操作するのでしょうか。ここでプロキシが機能します。インスタンス化されると、AddTodoItemServiceには、実際のオブジェクトではなく、TodoListBeanのプロキシが注入されます。そうすれば、サービスがTodoListBeanにアクセスする必要がある場合、コンテナーは現在のユーザーセッションからTodoListBeanを提供するため、サービスは、何かを行う代わりに、(サービスを呼び出したユーザーに基づいて)正しいBeanで動作します。各ユーザーのセッションスコープにサービスの多数のコピーを含めるのはばかげています。

于 2011-04-22T00:19:45.003 に答える