Session JSF是否存储我的助手类,该类也在会话中的ManageBean中引用?

Session JSF是否存储我的助手类,该类也在会话中的ManageBean中引用?,session,jsf,jsf-2,transient,session-scope,Session,Jsf,Jsf 2,Transient,Session Scope,只是关于JSF会话管理如何工作的一个疑问 我得到一个managedbean作为: @ManagedBean(name="loginBean") @SessionScoped public class LoginBean implements Serializable { private String userName; //getter and setter private String password; //getter a

只是关于JSF会话管理如何工作的一个疑问

我得到一个managedbean作为:

@ManagedBean(name="loginBean")
@SessionScoped
public class LoginBean implements Serializable
{

        private String userName;
        //getter and setter

        private String password;
        //getter and setter

        // Getting through spring injection
        @ManagedProperty(value="#{userBO}")
        private UserBO userBO;
        //setter method

        public fetchUserDetails(){
        User  user = userBO.getUSer(this.userName);
        //some processing
        }
    // more methods
    .
    .
    .
}
既然bean是sessionscope的,那么JSF会在会话中保留我的“userBO”对象吗? 我相信带有setter和getter的变量很可能存储在会话中。如果我错了,请纠正我。
或者我必须将“userBO”声明为瞬态,以便忽略它吗?

如果会话在请求之间持久化在内存中,则它引用的任何其他对象都将被保留,并且不符合垃圾收集的条件。没有任务将对象的内部设置引用移动到
null
。托管属性仅在创建bean时以及将其放入范围之前进行评估


userBO
设置为
transient
仅在会话被序列化(通过磁盘钝化、通过会话复制等)时才有效。

会话持久性依赖于服务器,我不想控制它。你的意思是说我的用户BO也被检查了?这很糟糕:/Session对象在这方面与VM中的任何其他对象都没有区别。硬引用意味着对象不能被垃圾收集。也许您可以在完成后将
userBO
设置为null(另请参见
@PostConstruct
),或者如果您将对象泄漏到范围之外,您可能需要重新检查bean设计-例如,您可以使用请求范围对象来使用
userBO
填充会话范围对象。谢谢,我猜到了同样的问题。显然,我在这里看到的最佳选择是将我的ManagedBeans设置为RequestScope,并手动设置我的会话对象:/injection您的会话对象到相关的请求对象中。这正是我之前所做的(injecting this session object),但后来我意识到我的userBO也链接到了我的会话对象。因此,现在我将会话对象移动到一个单独的类(sessionBean)中,并将其标记为sessionScope,然后在需要的地方注入它。再次感谢您提供的信息:)