2

只是对 JSF 会话管理如何工作的疑问

我有一个托管豆:

@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 是 sessionScoped,JSF 是否也会在会话中保留我的“userBO”对象?我相信带有 setter 和 getter 的变量很可能存储在会话中。如果我错了,请纠正我。还是我必须将“userBO”声明为瞬态以便将其忽略?

4

1 回答 1

2

如果您的会话在请求之间保持在内存中,则它引用的任何其他对象都将被保留,并且没有资格进行垃圾回收。没有任何任务可以将对象的内部设置引用传递到null. 托管属性仅在创建 bean 时和将其放入范围之前进行评估。

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

于 2012-03-24T11:01:05.560 回答