Enterprise 中級

廃止予定の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
難易度
中級
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コンテナを共有します。

共有 𝕏 🦋 in