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

unterhalb der Ausgangs:was ist der Unterschied zwischen registerShutdownHook() und schließen()

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. 

Während context.close() Verwendung gibt

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. 

Könnte jemand den Unterschied erklären?

Antwort

6

Die Klasse ApplicationContext definiert keine dieser Methoden als Teil ihrer Schnittstelle, aber die ConfigurableApplicationContext definiert beide.

Vom JavaDoc:

  • close() - schlie Anwendungskontext, alle Bohnen in seiner BeanFactory zu zerstören.
  • registerShutdownHook() - Registrieren Sie einen Shutdown-Hook mit der JVM-Laufzeit, schließen Sie diesen Kontext beim Herunterfahren von JVM, sofern er zu diesem Zeitpunkt noch nicht geschlossen wurde.

Grundsätzlich AbstractApplicationContext#close() schließen, oder Herunterfahren, die ApplicationContext zu der Zeit es aufgerufen wird, während AbstractApplicationContext#registerShutdownHook() schließen, oder Herunterfahren, die ApplicationContext zu einem späteren Zeitpunkt, wenn die JVM aus irgendeinem Grunde heruntergefahren. Dies wird durch Verwendung der JVM Shutdown-Hook-Funktionalität erreicht.

In beiden Fällen wird das tatsächliche Schließen durch die doClose() Methode durchgeführt.

Wenn Sie neugierig sind, warum Ihre Ausgänge so ähnlich aussehen, ist es, weil sie effektiv das gleiche tun, ob Sie #close() oder #registerShutdownHook() in Zeile 3 von Ihnen aufrufen. wird sofort heruntergefahren, und #registerShutdownHook wird heruntergefahren, kurz bevor die JVM beendet wird, das ist so ziemlich, sobald die Methode fertig ist aufgerufen wird, , weil es die letzte Zeile des Codes ist!

Verwandte Themen