JSF管理BeanとCDI Named Beanの比較
廃止予定のJSF @ManagedBeanを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;
}
}
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
統一モデル
1つのCDIコンテナがすべてのビーンを管理し、JSF・REST・サービス層が同一インジェクションを共有します。
ボイラープレート削減
@Injectが@ManagedPropertyと必要なセッターメソッドを置き換えます。
将来性
@ManagedBeanはJakarta EE 10で削除済みで、@Namedがサポートされた代替手段です。
旧来のアプローチ
@ManagedBean
モダンなアプローチ
@Named + CDI
JDKバージョン
11
難易度
中級
JDKサポート
JSF管理BeanとCDI Named Beanの比較
利用可能
CDI @NamedはJava EE 6以降利用可能。@ManagedBeanはJakarta EE 10で削除済み
仕組み
JSFの@ManagedBeanと@ManagedPropertyはJakarta Faces 2.3で非推奨になり、Jakarta EE 10で削除されました。CDIベースの代替では@NamedでビーンをEL式に公開し、@Injectで依存関係を配線します。これによりビーンモデルが統一され、JSFページ・JAX-RSリソース・EJBが同一のCDIコンテナを共有します。
関連ドキュメント