2016-04-24 42 views
0

有兩種到關閉Spring的ApplicationContext方式:什麼是關閉Spring ApplicationContext的最佳方式?

解決方案1:

  ApplicationContext context = new ClassPathXmlApplicationContext(
       "spring/application-context.xml"); 
     // Application core ... 
     ((AbstractApplicationContext) context).close(); 

解決方案2:

  ApplicationContext context = new ClassPathXmlApplicationContext(
        "spring/application-context.xml"); 
     ((AbstractApplicationContext) context).registerShutdownHook(); 
     // Application core ... 

這是什麼2個解決方案之間的差異,有什麼性能最好?

+0

如果您使用Spring Boot,爲什麼還要加載自己的上下文?後者在JVM退出時不會關閉任何嘗試清理內容的東西。 –

+0

對不起@ M.Deinum,我沒有使用Spring Boot。 –

+1

根據你的標籤你在哪裏。如果你在一個Web應用程序中,你不應該創建一個上下文,也應該創建一個上下文,而不是每次你需要一個bean或上下文提供的其他東西。所以問題是你真的需要這個,因爲你正在構建一個獨立的應用程序或.... –

回答

0

溶液1關閉應用程序上下文

溶液2個寄存器回調,所以彈簧將關閉,如果JVM被關閉,從Javadoc中:

註冊一個關閉掛鉤與JVM運行時,在JVM關閉時關閉此上下文,除非此時已關閉。

因此,無論是兩個不同勢的事,通常你會打電話給registerShutdownHook()創建的器件的應用背景後直接。所以當你的用戶終止JVM時,spring將被調用並關閉。

當你的應用程序結束時,你應該調用close()來允許spring銷燬它的bean。

相關問題