JSF Managed Bean vs CDI Named Bean
Remplace le @ManagedBean obsolète de JSF par @Named de CDI pour un modèle d'injection de dépendances unifié.
@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;
}
}
Modèle unifié
Un seul conteneur CDI gère tous les beans — JSF, REST et les couches de service partagent la même injection.
Moins de code répétitif
@Inject remplace @ManagedProperty et sa méthode setter obligatoire.
Pérenne
@ManagedBean a été supprimé dans Jakarta EE 10 ; @Named est le remplacement supporté.
CDI @Named disponible depuis Java EE 6 ; @ManagedBean supprimé dans Jakarta EE 10
@ManagedBean et @ManagedProperty de JSF ont été dépréciés dans Jakarta Faces 2.3 et supprimés dans Jakarta EE 10. Le remplacement basé sur CDI utilise @Named pour exposer le bean aux expressions EL et @Inject pour le câblage des dépendances. Cela unifie le modèle de beans : les pages JSF, les ressources JAX-RS et les EJB partagent le même conteneur CDI.