2012-04-05 57 views
0

在Scala Web應用程序中,是否延遲了應用程序服務器的生命週期或請求作用域?Scala web :: lazy val scope/lifetime

我認爲這是每個請求,但一直沒能找到明確的答案,因此這個問題。

感謝

回答

2

lazy是Scala的功能,沒有涉及到Web應用程序編程。這意味着:只在第一次訪問時評估一次。如果變量是每個請求創建的對象的一部分,則每個請求都會對其進行懶惰評估。

如果它是在應用程序範圍內的類(或object)中聲明的,一旦評估它將保持其值,只要該類被加載(所以可能是WAR生命週期)。

+0

是的,我理解評估一次;-)當你說,「如果變量是每個請求創建的對象的一部分」,這意味着在任何新的對象創建,懶惰屬性將被評估一次如果我新增了一個類的10個實例並在每個實例上訪問lazy foo,我將會產生懶惰10X的開銷) – virtualeyes 2012-04-05 09:38:45

+0

這與Scala單例對象有什麼關係,btw?沒有創建對象實例,所以在這裏它總是,訪問一次和未來的訪問不會產生我假設的懶惰開銷。 – virtualeyes 2012-04-05 09:41:46

+1

@virtualeyes:是的,'lazy'綁定到一個對象實例,所以如果你創建了10個對象並且訪問每個對象的'lazy'屬性,那麼每個對象*將被評估一次*。 WRT'object'類(singletons) - 只有一個實例,因此對於每個類(每個'ClassLoader')評估一次'lazy'。 – 2012-04-05 09:47:42