JSF Managed Bean vs CDI Named Bean
Substitua o @ManagedBean depreciado do JSF por CDI @Named para um modelo unificado de injeção de dependências.
@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;
}
}
Modelo unificado
Um único container CDI gerencia todos os beans — JSF, REST e camadas de serviço compartilham a mesma injeção.
Menos boilerplate
@Inject substitui @ManagedProperty e seu método setter obrigatório.
À prova de futuro
@ManagedBean foi removido no Jakarta EE 10; @Named é a substituição suportada.
CDI @Named disponível desde o Java EE 6; @ManagedBean removido no Jakarta EE 10
O @ManagedBean e @ManagedProperty do JSF foram depreciados no Jakarta Faces 2.3 e removidos no Jakarta EE 10. A substituição baseada em CDI usa @Named para expor o bean a expressões EL e @Inject para a conexão de dependências. Isso unifica o modelo de beans — páginas JSF, recursos JAX-RS e EJBs compartilham o mesmo container CDI.