JSF Managed Bean vs. CDI Named Bean
Ersetze das veraltete JSF-@ManagedBean durch CDI-@Named für ein einheitliches Dependency-Injection-Modell.
@ManagedBean
@SessionScoped
public class UserBean implements Serializable {
@ManagedProperty("#{userService}")
private UserService userService;
private String name;
public String getName() { return name; }
public void setName(String name) {
this.name = name;
}
public void setUserService(UserService svc) {
this.userService = svc;
}
}
@Named
@SessionScoped
public class UserBean implements Serializable {
@Inject
private UserService userService;
private String name;
public String getName() { return name; }
public void setName(String name) {
this.name = name;
}
}
Einheitliches Modell
Ein einziger CDI-Container verwaltet alle Beans — JSF, REST und Service-Schichten teilen dieselbe Injektion.
Weniger Boilerplate
@Inject ersetzt @ManagedProperty und dessen erforderliche Setter-Methode.
Zukunftssicher
@ManagedBean wurde in Jakarta EE 10 entfernt; @Named ist der unterstützte Ersatz.
CDI @Named verfügbar seit Java EE 6; @ManagedBean entfernt in Jakarta EE 10
JSFs @ManagedBean und @ManagedProperty wurden in Jakarta Faces 2.3 als veraltet markiert und in Jakarta EE 10 entfernt. Der CDI-basierte Ersatz verwendet @Named, um den Bean für EL-Ausdrücke verfügbar zu machen, und @Inject für die Abhängigkeitsverdrahtung. Dies vereinheitlicht das Bean-Modell — JSF-Seiten, JAX-RS-Ressourcen und EJBs teilen denselben CDI-Container.