Aplicaciones ansiosas. Frijoles administrados construidos varias veces.
Tengo un montón deansioso ApplicationScoped
frijoles manejados Algunos de ellos son inyectados en otros por elManagedProperty
Anotación, formando un árbol de dependencias. Cada frijol dependiente manipula a su padre después de la construcción.
Sin embargo, parece que se crea una nueva instancia para cada inyección, lo que hace que se deshagan las manipulaciones anteriores. A mi entender, unApplicationScoped
El frijol solo debe ser creado una vez. ¿He entendido mal o por qué está sucediendo esto? ¿Es porque están ansiosos?
Aquí hay un ejemplo:
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
}
}