2011-01-10 12 views
0

これは基本的なSpring 101のようですが、正しいことを確認できませんでした方法。状況は次のとおりです。私のWebアプリケーションには、外部システムから来るユーザーを処理するコントローラである単一のエントリポイントがあります。転送は、そのユーザーに関連する関連情報の束を含むPOSTリクエストです。 Aponエントリを作成するには、新しいUser Beanを作成し、そのユーザー情報でロードする必要があります。さらに、ユーザーがサービスをトリガーするビューをヒットすると、そのサービスが適切なユーザーBeanインスタンスにアクセスできるようにする必要があります。Spring 3で管理されたJSFアプリケーションのセッションBean、プロキシ、およびシングルトンに関するスコープの混乱

頭に浮かんだこれを行うための最初の方法は、ユーザーの新しいインスタンスを作成しますUserManagerのサービスを持っているデータのw /それを埋める、その後、Bean名としてユーザ名とSpringコンテナに登録することでした。サービスが呼び出されると、サービスはFactory.getBean(username)のような処理を行い、適切なUserインスタンスを見つけます。私がここに見る問題は、ユーザー&とUser beanの間のリンクが失われていることです。さらに、可能であれば、セッション中にBeanを持ち歩かないようにしたいと思います。これは、私がSpring AOP &プロキシを使用するはずですか?

このような状況を解決するための典型的なスプリングパターンは何ですか?

答えて

0

これは数週間後(この質問をして以来)です。その結果、私の知識レベルは指数関数的に拡大していますので、私の質問にも役立ちます。質問はあまりにも明白ではなかった)。

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

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

関連する問題