JSF Managed Bean vs CDI Named Bean
Sostituisci il deprecato JSF @ManagedBean con CDI @Named per un modello unificato di dependency injection.
@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;
}
}
Modello unificato
Un container CDI gestisce tutti i bean — JSF, REST e i livelli di servizio condividono la stessa iniezione.
Meno boilerplate
@Inject sostituisce @ManagedProperty e il suo metodo setter richiesto.
A prova di futuro
@ManagedBean è rimosso in Jakarta EE 10; @Named è il sostituto supportato.
CDI @Named disponibile da Java EE 6; @ManagedBean rimosso in Jakarta EE 10
JSF's @ManagedBean e @ManagedProperty sono stati deprecati in Jakarta Faces 2.3 e rimossi in Jakarta EE 10. Il sostituto CDI usa @Named per esporre il bean alle espressioni EL e @Inject per il cablaggio delle dipendenze. Questo unifica il modello di bean: le pagine JSF, le risorse JAX-RS e gli EJB condividono tutti lo stesso container CDI.