2012-03-12 9 views
22

私はSpring Beanのさまざまなスコープをはっきりと理解しています。しかし、私はエンタープライズ層のプロジェクトでBeanのプロトタイプスコープのいくつかのユースケースを探しています。 プロトタイプスコープ(要求スコープではありません)の実際のライフユースケースを共有することができれば嬉しいです。スプリングプロトタイプスコープ - ユースケース?

+0

私はこの短い質問には驚きましたが、建設的ではない、広すぎるとマークされていませんでした。http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans:誤解しないでください、私はこの質問は、このルックアップメソッドは春のドキュメントで説明されて –

答えて

4

私は、ほとんどが春lookup-methodと一緒に試作品を使用しました。私のアプリケーションはgame serverで、tcpポートで受信バイトをデコードする必要があります。プロトコルの実装クラスの内部で、次のBean定義

<bean id="channelBufferProtocol" class="org.menacheri.protocols.impl.ChannelBufferProtocol"> 
    <lookup-method name="createLengthBasedFrameDecoder" bean="lengthFieldBasedFrameDecoder"/> 
    <property name="eventDecoder" ref="eventDecoder"></property> 
    <property name="lengthFieldPrepender" ref="lengthFieldPrepender"></property> 
    <property name="eventEncoder" ref="eventEncoder"></property> 
</bean> 

を考えてみましょう、私は、このメソッドが呼び出されると、フレームデコーダpipeline.addLast("lengthDecoder", createLengthBasedFrameDecoder());を作成するために、次のコードを持って、春は新しいフレームデコーダのインスタンスを作成し、それを返します。

bean="lengthFieldBasedFrameDecoder"によって返されたBeanは、アプリケーション内のステートフルBeanであるため、スコープprototypeである必要があります。

注:プロトコルは、一緒にチェーンされた特定のデコーダとエンコーダのセットに過ぎません。 "責任の鎖"デザインパターン。

+0

偉大だと思います。それは、要求をすべきではないその後のhtml#豆工場法注射 –

5

私はプロトタイプBeanを使用して、設定されたフォーム要素(名前を検証するように構成されたテキストボックス、電子メールアドレスなど)を宣言し、Webアプリケーションで作成されるすべてのフォームに対して「リビング」インスタンスを取得しました。詳細は、私はこの方法を要約することを、唯一の原則は重要ではありません。

  • あなたが事前に定義されたコンフィギュレーション(fancy1のセットでそのインスタンスを作成する必要があり、多くの設定パラメータ
  • を持つクラスがあります、fancy2、STC。)我々は、モデルクラスの場合にはプロトタイプのスコープを使用することができ
0

XMLで事前構成としてインスタンスを作成するファクトリメソッドの種類としてapplicationContext.getBean("myBeanConfiguredFancy1")

  • 考える(やはり、CAアプリケーションが各スレッド/要求のモデルクラスの異なるインスタンスを必要とするため、休止状態のエンティティとして処理されます)。

  • +0

    は、スコープの代わりに、プロトタイプのスコープ? –

    2

    以前にSpringSourceで働いていた人で、このトピックについて開発者に話しかけてきました。ここに私のテイクです。プロトタイプは、テストのために素晴らしいものです。したがって、名前のプロトタイプであり、createnewではありません。また、Beanの新しいインスタンスをSpringコンテナからリクエストするたびに新しいインスタンスを作成するという説明はありません。

    私は、何年もの間、実際の生産アプリケーションでプロトタイプが意味をなさない場所は見つけられませんでした。オブジェクトが状態を保持している場合、通常はSpring Beanであってはいけません。すべてのBeanは、Transactionality、JPA、JMSなどの機能を追加する必要があるサービス、リポジトリ、およびシングルトンの非保持オブジェクトであることをすべてのアプリケーションで確認しました.POJOは、持っている。

    状態を保持する私のシステム内のオブジェクトは、私のEntitiesとViewのDTO、あるいはSpring Beanには意味をなさない他のものです。したがって、私のアプリケーションでは、単一の "プロトタイプ" Beanは存在しませんでした。