SessionScoped
@SessionScoped
public class SessionScopedClass implements Serializable {
//This class gets constructed once per session, and is shared among all CDI-managed classes within that session. Notice that it implements Serializable, since the instance will get put on the session.
@Inject
public SessionScopedClass(SomeDependency someDependency) {
doSomethingWith(someDependency);
}
public SessionScopedClass() {
//Note that it is required that a session scoped class have a public no-args constructor
}
}
每個會話將建立一個使用 @SessionScoped 註釋的類,並且同一會話中的兩個物件將共享會話範圍類的相同例項。
重要的是要注意會話作用域類應該實現 Serializable。存在此要求是因為 bean 將儲存在該特定會話範圍例項的 servlet 容器的會話中。通常,放入會話的任何物件都需要可序列化,原因有兩個:首先,會話可能會在一定量的不活動後保留到磁碟以節省記憶體。這被稱為會話鈍化,它需要序列化。第二個原因是,在高可用性群集中,通常使用會話複製,以允許群集中的任何伺服器為給定會話提供服務請求。這通常也需要序列化。
與請求作用域和應用程式作用域類似,會話作用域類必須具有公共的無引數建構函式。