0
  1. Springコンテナ(XMLBeanFactory)はいつSpringによって正常にアンロードされますか?
  2. アプリケーションが実行されているが、BeanFactoryへの唯一のハンドラーがスコープ外になるとどうなりますか?
  3. スプリングコンテナをロードする理想的な方法は何ですか?正しいhandler = new BeanFactory()アプローチをしていますか?


更新:
コンテナーがスコープ外になると、実際にclose()メソッドが呼び出され、保持されているすべてのリソースが解放されることが期待されます。しかし、それは起こりません!スプリングコンテナがスコープ外になっているのに、メモリがいっぱいになる(OutOfMemoryエラー)というケースが発生しました。その理由は、Springコンテナによって作成されたSessionFactoryオブジェクトは、静的として作成されているため、ガベージコレクションされなかったためです。これclose()->destroy()は、コンテナがスコープ外になったときに呼び出されなかったことを意味します。Spring自体にリークの問題があると私は信じています。

4

2 に答える 2

3
  1. これは、インスタンス化する方法によって異なります。私はウェブアプリですが、これは通常、コンテキストのシャットダウン時に行われます。コマンドラインで、コンテキストを具体的に閉じる必要があります(「AbstractApplicationContext」の「close」メソッドを使用)
  2. 範囲外の他のものと同じです。「クローズ」メソッドがファイナライザーフェーズの一部であるかどうかはわかりません。ファイナライザーが破壊フェーズをトリガーすることを願っています。
  3. 他の誰かが言ったように、BeanFactoryを直接使用しないでください。ApplicationContextを作成します。Webアプリの最も一般的な方法はContextLoaderListenerであり、コマンドラインプログラムの場合はClassPathXmlApplicationContextです。

//特定の型を保持します。これは、ApplicationContextインターフェース自体の一部ではないため、後で「close」メソッドを呼び出すことができます。ClasspathXmlApplicationContext context = new ClasspathXmlApplicationContext(new String [] {"applicationContext.xml});

その後、それを閉じます。

context.close();

Webアプリの場合:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>
于 2012-05-29T16:59:27.470 に答える
0

BeanFactoryは、春に物事を行うための古代の方法です。Springコンテキストをインスタンス化するためのより現代的な方法は、ApplicationContextインターフェースを使用することです。参考までに、

4.2.2コンテナのインスタンス化

WebアプリでSpringを使用する場合は、以下もお読みください。

4.14.4Webアプリケーションの便利なApplicationContextインスタンス化

于 2012-05-29T15:15:29.973 に答える