5

私はこの新しいmvcプロジェクトを持っており、すべてのBeanがデフォルトでスコープされています(プロトタイプやセッションはありません)。単一のアプリケーションコンテキストで。

すべてのBeanをデフォルトのスコープにすることで、アプリケーション全体を単一のスレッドで実行できるようにしようとしていますか?

もしそうなら、それは前のものが完了するまで(複数または同じセッションからの)各httprequestをキューに入れるようにしますか?そのようなシナリオを回避する方法はアドバイスやリンクが役に立ちます。

私は春とJavaの開発に比較的慣れていません。

4

2 に答える 2

11

Spring Beanは通常ステートレスであるため、複数のスレッドから安全に呼び出すことができます。これがアプリケーションの仕組みです。すべてのコントローラー、サービス、DAOなどのインスタンスは1つだけです。ただし、サーブレットコンテナー(Spring経由)は複数のスレッドからこれらのBeanを呼び出します。これは完全にスレッドセーフです。

実際、プレーンサーブレットでも状況は同じです。各サーブレットのインスタンスのみが存在し、無限の数のスレッドからアクセスできます。このサーブレットがステートレスであるか、適切に同期されている限り。

のステートレスセッションBeanと混同しないでください。各クライアントは、プールから独自のインスタンスを取得します。1

1-実際、それは少しばかげています-Beanは定義上ステートレスであるため、Beanをプールして同時アクセスを防ぐ意味はありません...

于 2012-08-27T18:22:45.843 に答える
2

シングルトンとは、各Beanのインスタンスが1つだけであることを意味します。一般に、このようなBeanは、状態を持たない処理要素です。それらで呼び出されるメソッドには、作業する入力を含むコンテキストが渡されます。したがって、このようなシングルトンBeanのメソッド呼び出しは、本質的にスレッドセーフです。

于 2012-08-27T18:22:39.933 に答える