2010-05-11 71 views
2

可以獲得工作屬性「destroy-method」。Spring bean的DESTROY-METHOD屬性和web應用程序「prototype」d bean

第一,即使我鍵入不存在的方法名稱爲「滅法」屬性,

春天初始化完成罰款(已纔怪!)。

接下來,當一個bean有一個「原型」的範圍,那麼我想它必須在應用程序

關閉之前被銷燬。這不會發生,它根本就不會被稱爲我的情況。

雖然,在解壓縮這個bean之後,我可以明確地調用這個方法,它可以完成它的工作。

你能解釋爲什麼這個方法在我的Spring 2.5中從來沒有被調用過嗎?

p.s.該方法存在,它是公開的,沒有任何爭論。

這似乎是一個更困難的任務,然後我想。

問題是這種銷燬方法在上下文關閉的時候被調用,而 這是一種罕見的情況。

我的問題是這樣的:

我有一個web應用程序。我有一個「原型」的豆子。

我需要的是當前會話關閉時,這個銷燬方法被Spring自動調用。

我可以手工做,但有沒有解決方案如何使春季做這份工作?它在會話被銷燬後銷燬bean,Spring可能會在銷燬它之前調用該bean的一個方法?

p.s. Spring不管理原型bean的生命週期,所以Spring不會銷燬它們:)

+0

也許你應該試着尋找到的方面只能 – ant 2010-05-11 11:01:49

+0

你能解釋一下這個bean做什麼,你爲什麼需要在每個會話中銷燬它,等等?我有一種感覺,你可能會基於你認爲需要解決的問題提出一個問題,但真正的問題/問題可能有一個更容易的解決方案。例如,這個bean處理某種資源(如數據庫連接)? – 2010-05-11 11:10:42

+0

@matt b假設會話關閉時,這個bean必須記錄一條語句「我被銷燬了」。我現在看到Spring不能處理原型,所以只有一種方法:手動執行,用servlet手動執行。春天在這裏幫不了什麼忙。 – EugeneP 2010-05-11 11:24:37

回答

7

Spring容器不管理原型bean。

reference documentation一個片段:

因此,儘管初始化 生命週期回調方法被稱爲 上的無論範圍的所有對象,在 的原型的情況下,配置 破壞生命週期回調是 不叫。

如果可能,請嘗試請求或會話範圍。

當HTTP會話是最終 丟棄,範圍限定於 特定的HTTP Session是 丟棄豆。

BTW:會話和請求範圍,如果您使用的是基於web的ApplicationContextXmlWebApplicationContext