JSF Managed Bean مقابل CDI Named Bean
استبدل @ManagedBean المُهمَل في JSF بـ CDI @Named للحصول على نموذج حقن تبعيات موحّد.
مقارنة الكود
✕ 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;
}
}
هل ترى مشكلة في هذا الكود؟ أخبرنا.
لماذا يتفوق الأسلوب الحديث
نموذج موحّد
حاوية CDI واحدة تدير جميع الحبّات — JSF والـ REST وطبقات الخدمة تشترك في نفس الحقن.
كليشيه أقل
@Inject تستبدل @ManagedProperty ودالة الضبط المطلوبة.
مُستقبلي
تمت إزالة @ManagedBean في Jakarta EE 10؛ @Named هو البديل المدعوم.
الأسلوب القديم
@ManagedBean
الأسلوب الحديث
@Named + CDI
منذ JDK
11
الصعوبة
متوسط
دعم JDK
JSF Managed Bean مقابل CDI Named Bean
متاح
CDI @Named متاح منذ Java EE 6؛ تمت إزالة @ManagedBean في Jakarta EE 10
كيف يعمل
تم إهمال @ManagedBean و @ManagedProperty في Jakarta Faces 2.3 وإزالتهما في Jakarta EE 10. يستخدم البديل القائم على CDI @Named لكشف الحبّة لتعبيرات EL و @Inject لتوصيل التبعيات. يوحّد هذا نموذج الحبّة: صفحات JSF وموارد JAX-RS وEJBs تشترك في نفس حاوية CDI.
توثيق ذو صلة