2011-12-07 10 views
11

私は春には新しく、現在私のプロジェクトの1つで使っています。私は春のコンテナがすべての豆を保持し、すべての豆の範囲がデフォルトでシングルトンであることを学びました。 application-context.xmlまたはannptation @scopeを使ってスコープを変更できます。Spring Beanコンテナのスコープとガベージコレクションについて

私の質問は、クラスのスコープを「プロトタイプ」とすると、スプリングコンテナは毎回、新しいオブジェクトをインスタンス化します。今、ガベージコレクションはどのように処理されますか?オブジェクトがもはや使用されていない場合、またはオブジェクトがコンテナ内にぶら下がっている場合、オブジェクトはガベージコレクションされますか?なぜなら、私は毎回多くのオブジェクトを作成したくないから、そのオブジェクトを必要とし、メモリをロードするからです。

誰か理解してください。おかげさまで

答えて

1

コンテナはインスタンス化されたBeanへの参照を保持しません。インスタンス化されたBeanへの参照は保持されません。

他にBeanを参照するものがない場合(大まかに)、それはGCに適格です。

+0

ありがとうございました。迅速な対応のためにありがとうございました – ravi

22

スプリングドキュメント(3.5.2 The prototype scope)から:、容器のインスタンス化構成し、それ以外のプロトタイプオブジェクトをアセンブル:他のスコープとは対照的に

、春プロトタイプビーンの完全なライフサイクルを管理していませんそれをクライアントに渡します。このプロトタイプインスタンスのレコードはありません。

prototypeスコープ付きBeanへの参照を作成して取得すると、これはJVMに存在する唯一の参照です。この参照がスコープ外になったら、オブジェクトがガベージコレクションのようになります

void bar() { 
    Object foo = ctx.getBean("foo") 
} 

あなたがそこにbar()方法を残した瞬間、それはガベージコレクションの対象であることを意味する、fooの新しいインスタンスへの他の参照ではありません。このモデルの結果である:このよう

初期ライフサイクル・コールバック・メソッドが構成破壊ライフサイクルコールバックが呼び出されないである、プロトタイプの場合に関係なく、スコープのすべてのオブジェクトに対して呼び出されるが。

+0

ありがとうございました。 – ravi

関連する問題