Enterprise 中级

JSF Managed Bean 与 CDI Named Bean

用 CDI @Named 替代已废弃的 JSF @ManagedBean,实现统一的依赖注入模型。

✕ 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 容器管理所有 bean——JSF、REST 和服务层共享相同的依赖注入机制。

🔒

完整的 CDI 功能

获得拦截器、装饰器、事件和所有 CDI 作用域。

🧪

更易测试

普通 CDI bean,无需模拟 JSF ManagedBean 基础设施。

旧方式
@ManagedBean
现代方式
@Named + CDI
自 JDK
11
难度
中级
JSF Managed Bean 与 CDI Named Bean
可用

CDI @Named 自 Java EE 6 起可用;@ManagedBean 在 Jakarta Faces 4.0 中移除

JSF 的 @ManagedBean 和 @ManagedProperty 在 Jakarta Faces 4.0 中已废弃并移除。CDI @Named bean 提供相同的 EL 访问,并与整个 Jakarta EE 容器集成。

分享 𝕏 🦋 in