-1

以下の質問にお答えください。

1) Bean はどこにロードされますか。それらは Spring ApplicationContext にロードされますか?
または、ApplicationContext によってヒープにロードされます。
2) 春の Web アプリケーションでは、アプリケーションが 1 日ほど使用されていない場合、ApplicationContext オブジェクトはガベージ コレクションされますか?

3) シングルトンをスレッドセーフにする方法は?
4) Spring でスレッドセーフの問題がある他のオブジェクトは何ですか。
5) BeanPostProcessor のメソッドは、アプリケーション内のすべての Bean に対して実行されます。
複雑なアプリケーションで何千ものオブジェクトがある場合、どのように処理されますか。
beanpostProcessors はスレッドセーフですか?

4

1 に答える 1

1

これらの質問は分割した方がよいと思います。それぞれに専用のスレッドが必要です。

  1. いずれにしても、Spring が Bean をロードします。どのように?Bean に関するメタデータ (xml/注釈ベース) を読み取り、それらを結び付けます。春はあなたのために「新しい」ものを提供しますが、この Bean にアクセスするにはどうすればよいでしょうか? ここで ApplicationContext が登場します。これは、これらすべての Bean のコンテナーのようなもので、名前 (getBean("beanName")) で Bean インスタンスにアクセスできるコンテナーです。非常に単純化したアプローチでは、アプリケーション コンテキストを名前による Bean のマップと考えることができます。ここでの「ヒープ」の懸念を完全には理解していませんでした。Spring Bean は、JVM に存在する単なる Java オブジェクトであるため、基本的にヒープにロードされます。唯一の違いは、コードではなくスプリングによってロードされることです。

  2. アプリケーション コンテキストは、Web アプリケーション全体に保存されている (そしてそこからアクセスできる) ため、ガベージ コレクションは行われません。もちろん、このアプリケーション コンテキストによって作成された Bean は、シングルトンなどでない場合はガベージ コレクションできます。あいまいな答えであることは承知しています。遠慮なく質問を絞り込んでください。

  3. コア アーキテクチャのシングルトンは、スレッド セーフとは何の関係もありません。はい、春は「シングルトン」Bean スコープを提供します。つまり、getBean 呼び出しを行うたびに同じインスタンスが取得されるため、シングルトンになります (この Bean を春にのみ管理する限り)。この定義は Bean の設計には影響しません。したがって、たとえば、このクラスのコンストラクター (new キーワード) を呼び出すだけでこのクラスのインスタンスを作成すると、このタイプのオブジェクトが管理されるオブジェクトとはまったく異なるものになります。バネ。フレームワークとしてのSpringの責任がどこから始まり、いつ終わるかを理解することが重要です:) したがって、シングルトンをスレッドセーフにしたい場合は、スレッドセーフになるように設計する必要があります。ステートレスでやるのが一番ですが、やはりSpringとは関係ないので別スレッドで聞いてください、

  4. 質問がよくわからないので、答えられません、ごめんなさい:(

  5. ここでも、bean ポスト プロセッサのスレッド セーフは、インフラストラクチャ コードではなく、そこに実際に書き込まれたコードに依存します。

お役に立てれば

于 2013-10-03T05:00:52.047 に答える