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 容器的會話中。通常,放入會話的任何物件都需要可序列化,原因有兩個:首先,會話可能會在一定量的不活動後保留到磁碟以節省記憶體。這被稱為會話鈍化,它需要序列化。第二個原因是,在高可用性群集中,通常使用會話複製,以允許群集中的任何伺服器為給定會話提供服務請求。這通常也需要序列化。

與請求作用域和應用程式作用域類似,會話作用域類必須具有公共的無引數建構函式。