2017-02-03 12 views
3
HelloWorld obj = (HelloWorld) context.getBean("helloWorld"); 
    obj.getMessage(); 
    context.registerShutdownHook(); 

context.close()を使用して一方registerShutdownHook()との違いは何ですか近い()出力以下

Feb 03, 2017 11:46:12 AM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 
INFO: Refreshing org[email protected]799f7e29: startup date [Fri Feb 03 11:46:12 IST 2017]; root of context hierarchy 
Feb 03, 2017 11:46:12 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [Beans.xml] 
Bean is going through init. 
Your Message : Hello World! 
Bean will destroy now. 

Feb 03, 2017 11:53:57 AM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 
INFO: Refreshing org[email protected]799f7e29: startup date [Fri Feb 03 11:53:57 IST 2017]; root of context hierarchy 
Feb 03, 2017 11:53:57 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [Beans.xml] 
Bean is going through init. 
Your Message : Hello World!  
Feb 03, 2017 11:53:57 AM org.springframework.context.support.ClassPathXmlApplicationContext doClose 
INFO: Closing org[email protected]799f7e29: startup date [Fri Feb 03 11:53:57 IST 2017]; root of context hierarchy 
Bean will destroy now. 

は誰かが違いを説明してもらえ与えますか?

答えて

6

ApplicationContextクラスは、これらのメソッドのいずれかをインターフェイスの一部として定義していませんが、ConfigurableApplicationContextはこれらの両方を定義しています。 JavaDocのから

  • close() - その豆の工場ですべてのBeanを破壊し、このアプリケーションのコンテキストを閉じます。
  • registerShutdownHook() - シャットダウンフックをJVMランタイムに登録し、その時点ですでに閉じていない限り、JVMシャットダウン時にこのコンテキストを閉じます。 JVMが何らかの理由でシャットダウンされたときAbstractApplicationContext#registerShutdownHook()後で、ApplicationContextを閉じる、またはシャットダウンする一方、基本的

AbstractApplicationContext#close()は、それが呼び出された時点で、ApplicationContextを閉じる、またはシャットダウンします。これは、JVMのシャットダウンフック機能を利用することで実現します。

どちらの場合でも、実際の終了はdoClose()メソッドで行われます。

アウトプットが似ているのが気になる人は、#close()または#registerShutdownHook()を3番目の例で呼んでも、効果的に同じことをしているからです。 は即座にシャットダウンし、#registerShutdownHookは、JVMが終了する直前にシャットダウンします。これは、メソッドが呼び出されるとすぐに、コードの最後の行であるためです。

関連する問題