Eager ApplicationScoped verwaltete Beans, die mehrmals erstellt wurden
Ich habe ein paareifrig ApplicationScoped
gemanagte Bohnen. Einige von ihnen werden von der US-Regierung in andere injiziertManagedProperty
Annotation, die einen Baum von Abhängigkeiten bildet. Jede abhängige Bean bearbeitet nach der Erstellung die übergeordnete Bean.
Es scheint jedoch, dass für jede Injektion eine neue Instanz erstellt wird, wodurch vorherige Manipulationen rückgängig gemacht werden. Meines ErachtensApplicationScoped
Bean sollte nur einmal erstellt werden. Habe ich falsch verstanden oder warum passiert das? Liegt es daran, dass sie eifrig sind?
Hier ist ein Beispiel:
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.javapackage 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.javapackage 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
}
}