Jsf 关于EJB bean的作用域

Jsf 关于EJB bean的作用域,jsf,ejb,Jsf,Ejb,我在某处读到,所有EJB bean(无状态、有状态和单例)的默认作用域都是依赖作用域。Dependent作用域意味着作用域取决于注入它们的bean。所以,我尝试测试这个概念 我有一个名为a的请求范围管理bean。我正在将一个无状态bean B注入一个默认依赖于其范围的。因此,B作用域依赖于A,A是请求作用域。所以对于每一个新的请求,都应该有不同的A和B实例。但我不明白。当我为两个不同的请求运行代码时,我得到的是A的不同实例,但B的相同实例。为什么 其次,当我将一个依赖作用域有状态Bean C注入

我在某处读到,所有EJB bean(无状态、有状态和单例)的默认作用域都是依赖作用域。Dependent作用域意味着作用域取决于注入它们的bean。所以,我尝试测试这个概念

我有一个名为a的请求范围管理bean。我正在将一个无状态bean B注入一个默认依赖于其范围的。因此,B作用域依赖于A,A是请求作用域。所以对于每一个新的请求,都应该有不同的A和B实例。但我不明白。当我为两个不同的请求运行代码时,我得到的是A的不同实例,但B的相同实例。为什么

其次,当我将一个依赖作用域有状态Bean C注入到a中时,我得到了两个不同请求的a和C的不同实例。在无状态bean的情况下也必须发生这种情况,但它没有发生

如果我将一个具有默认依赖范围的单例bean D注入bean a,对于两个不同的请求,类似于第一种情况,我得到的是不同的bean实例,而不是相同的cbean实例,为什么


根据我的理解,当bean处于默认范围依赖时,无论它是无状态的、有状态的还是单例的,它的范围都取决于它注入的bean。因此,如果Bean A是请求范围的,那么所有注入到具有依赖范围的Bean中的Bean都必须是请求范围的,并且对于不同的请求必须具有不同的实例。谁能给我解释一下为什么没有发生

不要忘记ejb是池化的。因此,据我所知,如果您使用它的hash/toString()测试它是同一个实例,那么您可能会一次又一次地从池中得到相同的实例……但是它得到的是有状态bean的不同实例和无状态/单例bean的相同实例。此外,我不仅使用hash/toString()方法检查相同的实例,还检查由这些对象初始化的实例变量。对于这两个不同的请求,单例/无状态bean具有相同的实例,并且两个实例对于实例变量具有相同的值。