在 Java EE 6 中,各种受管 Bean 之间存在一些重叠:JSF 受管 Bean(@ManagedBean)、CDI 管理 Bean (@Named) 和 EJB Bean(@Stateless、@Statefull、@Singleton)。
在视图层中,我没有看到坚持@ManagedBean有什么特别的好处。CDI变体@Named似乎能够执行相同且更多操作,例如,为您提供对转换范围的访问权限。
目前的想法似乎是,最终EJB组件模型也将作为一组CDI注释进行改造。特别是专家组成员Reza Rahman经常暗示这一点。例如,请参阅 Java EE 6 中的依赖注入 - 第 1 部分
目前还没有发生这种情况,所以EJB bean仍然是放置业务逻辑的最容易的地方,特别是当JPA用于持久性时。
尽管如此,无论CDI是否会获得EJB的功能,恕我直言,使用单独的bean作为“支持bean”概念,使用单独的bean作为“业务逻辑”仍然是一种最佳实践。
支持 Bean 可能非常纤细,只包含一些对模型对象和服务 (EJB) 的引用。支持Bean的操作方法几乎可以直接委托给服务,但它们的附加价值在于为用户提供反馈(在成功或失败时添加FacesMessages)并进行小的UI修改(例如,将布尔值设置为false,显示一些对话框)。
服务(业务逻辑)不应了解任何特定演示文稿。它们应该同样可以从 JSF 支持 Bean、JAX-RS、Servlets、独立 Java SE 远程客户机或其他任何位置很好地使用。
即使所有的豆子都会变成CDI豆子,那么这并不能改变这种基本的责任分工。