我有一堆渴望ApplicationScoped
託管的bean。其中一些注入到其他註釋中,形成一個依賴關係樹。每個依賴bean在構建後都會操縱其父項。Eager ApplicationScoped被管理的bean多次構建
但是,它似乎是爲每次注入創建一個新實例,因此使以前的操作撤消。據我瞭解,一個ApplicationScoped
bean只能創建一次。我誤解了,或者爲什麼會發生這種情況?是因爲他們渴望嗎?
下面是一個例子:
ParentBean.javapackage example;
import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
@ManagedBean(eager = true)
@ApplicationScoped
public class ParentBean
{
static int initCount = 0;
// ...
@PostConstruct
public void init()
{
++initCount; // Will end up being between 1 and 3. Expected always 1.
// ...
}
}
Child1Bean.java
package example;
import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
@ManagedBean(eager = true)
@ApplicationScoped
public class Child1Bean
{
@ManagedProperty("#{parentBean}") ParentBean parentBean;
public ParentBean getParentBean()
{
return parentBean;
}
public void setParentBean(ParentBean parentBean)
{
this.parentBean = parentBean;
}
@PostConstruct
public void init()
{
// manipulate parentBean
}
}
Child2Bean.java
package example;
import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
@ManagedBean(eager = true)
@ApplicationScoped
public class Child2Bean
{
@ManagedProperty("#{parentBean}") ParentBean parentBean;
public ParentBean getParentBean()
{
return parentBean;
}
public void setParentBean(ParentBean parentBean)
{
this.parentBean = parentBean;
}
@PostConstruct
public void init()
{
// manipulate parentBean
}
}
你能給出一個你如何做的代碼示例嗎? –
好的,我添加了一個例子。 – Spomf
不要以爲我會做任何改變,但嘗試'@ManagedProperty(value =「#{parentBean}」)', – Daniel