JSF Managed Bean kontra CDI Named Bean
Zastąp przestarzały JSF @ManagedBean adnotacją CDI @Named dla ujednoliconego modelu wstrzykiwania zależności.
Porównanie kodu
✕ 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;
}
}
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Ujednolicony model
Jeden kontener CDI zarządza wszystkimi beanami — JSF, REST i warstwy serwisów współdzielą to samo wstrzykiwanie.
Mniej boilerplate
@Inject zastępuje @ManagedProperty i wymaganą metodę setter.
Przyszłościowy
@ManagedBean jest usunięty w Jakarta EE 10; @Named to wspierany zamiennik.
Stare podejście
@ManagedBean
Nowoczesne podejście
@Named + CDI
Od JDK
11
Poziom trudności
Średniozaawansowany
Wsparcie JDK
JSF Managed Bean kontra CDI Named Bean
Dostępne
CDI @Named dostępne od Java EE 6; @ManagedBean usunięty w Jakarta EE 10
Jak to działa
Adnotacje @ManagedBean i @ManagedProperty JSF zostały zdeprecjonowane w Jakarta Faces 2.3 i usunięte w Jakarta EE 10. Zamiennik oparty na CDI używa @Named do ekspozycji beana na wyrażenia EL i @Inject do łączenia zależności. To unifikuje model beanów — strony JSF, zasoby JAX-RS i EJB współdzielą ten sam kontener CDI.
Powiązana dokumentacja
Dowód