Ich habe eine Reihe von eifrigApplicationScoped
verwalteten Bohnen. Einige von ihnen werden durch die ManagedProperty
Annotation in andere injiziert und bilden einen Baum von Abhängigkeiten. Jede abhängige Bohne manipuliert ihre Eltern nach der Konstruktion.Eager ApplicationScoped verwaltete Bohnen mehrfach konstruiert
Es scheint jedoch, als ob für jede Injektion eine neue Instanz erstellt wird, wodurch vorherige Manipulationen rückgängig gemacht werden. Nach meinem Verständnis sollte eine ApplicationScoped
Bean nur einmal erstellt werden. Habe ich missverstanden oder warum passiert das? Ist es weil sie eifrig sind? Hier
ein Beispiel:
ParentBean.java
package 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
}
}
können Sie einen Codebeispiel geben, wie Sie es tun? –
Okay, ich habe ein Beispiel hinzugefügt. – Spomf
glaube nicht, dass ich etwas ändern werde, aber versuchen Sie '@ManagedProperty (value =" # {parentBean} ")', – Daniel