2011-10-29 15 views
0

Spring Beansには2種類のスコープがあります(ウェブのスコープを考慮しない場合):singleton、デフォルトはprototypeです。大まかに、シングルトンとプロトタイプの設計パターンをコンテキスト内で実装します。春のステートレスBeanとステートフルBeanのアナログ

したがって、Beanにプロトタイプスコープがある場合、EJBのステートフルBeanのような一意の状態を保持できます。 Beanのスコープがシングルトンの場合、コンテナはそのインスタンスを1つだけ作成します。したがって、EJB 3.1のシングルトンBeanは、春のシングルトンBeanのアナログです。

しかし、私はSpringでステートレスBeanの機能をどのように取得できますか(ステートレスBeanをEJBコンテナにプールすることについて言及していますが、各スレッドはステートレスBeanの一意のインスタンスを持っています)

+0

スレッドが一意のインスタンスを持っているのは本当ではないことに注意してください。単一のスレッドが同じBeanに対してお互いに複数の呼び出しを行った場合、すべての呼び出しが別のインスタンスで終了する可能性があります。むしろ、それは逆の方法です。ステートレスセッションBeanでは、一度に1つのスレッドしかアクティブでなくても構いません。フレームワークは異なる要求を異なるインスタンスに自動的にルーティングします。 –

+0

ありがとう、ちょうどあなたが話していることを意味する – maks

答えて

2

どちらも、スレッドセーフであり、シングルトンBeanはOKです(これは大部分のケースです)。

またはできない場合は、プロトタイプを使用する必要があります。 SpringプロトタイプBeanとステートレスEJBセッションBeanの違いは、ステートレスセッションBeanがプールされていることです。しかし、これらの年齢では、それらをプールするか、毎回新しいインスタンスを作成しても大きな違いはありません。毎回新しいインスタンスを作成すると、GCに役立つかもしれません。

+2

プールは、プールを適切なサイズに設定することによって自動リソース調整に役立ちます。さらに、Beanインスタンスは安価かもしれませんが、その関連リソースはそうではないかもしれません。また、プロキシ+プールパターンを使用することで、多くの「豆」を注入することは非常に安くなり、使用されなくなっても問題ありません。ステートレスBeanの場合のプロキシは、プールを指すURLとちょうど同じです。 –

関連する問題