JSF Managed Bean vs CDI Named Bean
Replace deprecated JSF @ManagedBean with CDI @Named for a unified dependency injection model.
Code Comparison
✕ Java EE
@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;
}
}
✓ Jakarta EE 10+
@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;
}
}
Why the modern way wins
Unified model
One CDI container manages all beans — JSF, REST, and service layers share the same injection.
Less boilerplate
@Inject replaces @ManagedProperty and its required setter method.
Future-proof
@ManagedBean is removed in Jakarta EE 10; @Named is the supported replacement.
Old Approach
@ManagedBean
Modern Approach
@Named + CDI
Since JDK
11
Difficulty
intermediate
JDK Support
JSF Managed Bean vs CDI Named Bean
Available
CDI @Named available since Java EE 6; @ManagedBean removed in Jakarta EE 10
How it works
JSF's @ManagedBean and @ManagedProperty were deprecated in Jakarta Faces 2.3 and removed in Jakarta EE 10. The CDI-based replacement uses @Named to expose the bean to EL expressions and @Inject for dependency wiring. This unifies the bean model: JSF pages, JAX-RS resources, and EJBs all share the same CDI container.
Related Documentation