2011-01-06 38 views
2

我知道ServletContextListener是什麼以及如何在web.xml中實現/註冊它。什麼是註冊爲ServletContextListener的類的生命週期

但問題是以下幾點。在web應用程序的開始,創建每個javaVM的單個監聽器實例。然後調用其contextInitialized()方法。

在應用程序關閉的那一刻,監聽器的contextDestroyed()方法被調用。但是它是否是聽衆的同一個實例?或者說第一個實例可能會被銷燬併爲contextDestroyed()調用創建了一個新實例?

+0

生命週期貫穿整個應用程序(我會認爲)。 – 2011-01-06 15:17:33

+0

我想看看證明鏈接:) – Mikhail 2011-01-06 15:19:32

回答

4

明確的證明必須來自Servlet規範。我不知道,它提供了一個明確的回答你的問題,但它確實提供了一個強烈的暗示:

SRV.10.3.3偵聽器註冊
Web容器創建的 每個監聽器類的實例,並在 處理 應用程序發出的第一個請求之前,將事件通知註冊爲 。

這意味着禁止在處理第一個請求之後創建實例。

1

如何在contextInitialized()和contextDestroyed()中放置一些代碼。

事情是這樣的:

System.out.println(this.toString()) 

假設你不覆蓋對象的默認toString方法,你應該看到對象的十六進制(@ 8104b1)將hashCode和這樣做,你可以,如果它檢查是同一個對象。

+0

這將證明該實例是相同的只爲一些特殊情況下:) – Mikhail 2011-01-06 15:46:24

相關問題