我不知道如何應用在CDI不同的bean作用域(@ApplicationScoped
,@SessionScoped
和@RequestScoped
)的作品。我瞭解生命週期,但容器中的哪些地方存儲了這些信息?我在JSF bean上使用這些註釋。不同的bean作用域在服務器上如何工作?
如何是這些bean存儲在服務器上,以及如何能夠知道哪些豆屬於誰的服務器。
例如,一個bean有一個@SessionScoped
存儲在HTTPSession
對象的幕後? @ApplicationScoped
是否存儲在地圖實例變量中的豆ServletContext
?如果是這樣,那麼線程安全性如何?我想我誤解了它,但如果有人能教會我會發生什麼,它們被存儲在何處(不同的範圍),服務器如何知道哪些bean屬於誰......就像其他ID一樣(不僅會話ID)?
我btw使用Java EE 6所有參考實現。
好,所以沒有更多的「騙人把戲」,以它比:)不過,據我所知,'@ ApplicationScoped' AKA的ServletContext是不是線程安全的,因爲多個客戶端可以嘗試在同一時間去改變它......但爲什麼'@ SessionScoped'線程不安全?是不是隻有一個客戶可以訪問同一個bean? – LuckyLuke 2012-04-13 17:21:31
對於'SessionScoped',實際上沒有限制多少個請求可以同時訪問它。當然,他們通常都來自同一個客戶。考慮來自同一個窗口的多個窗口,多個標籤或多個AJAX請求。 – 2012-04-13 17:39:01
好的,那麼你提到了,如果一個bean本質上是線程安全的,比如EJB(至少有一些類型)......那麼你的意思是它保留爲JSF中使用的bean的屬性? – LuckyLuke 2012-04-13 18:47:46