gpt4 book ai didi

jsf - @ManagedBeans 在 JavaEE6 中是否因为 CDI/Weld 中的 @Named 而过时?

转载 作者:行者123 更新时间:2023-12-03 07:08:39 26 4
gpt4 key购买 nike

由于 CDI(及其实现 Weld),JEE6 中的每个 POJO 都可以使用 @Named 进行注释,这使得 POJO 可以被 View 访问。

这是否意味着 ManagedBeans 现在已经完全过时了?或者我是否错过了 @ManagedBean 仍然有意义的东西?

最佳答案

简而言之,@ManagedBean对于使用 JSF 但不使用 JSR 299 的应用程序来说是有意义的(无论原因是什么)。以下是加文·金 (Gavin King) 的详细解释:

Re: Comparisons to @ManagedBean annotations in JSF2?:

While looking through the Weld examples, and the older WebBeans documentation, it looks like a competitor to the new @ManagedBean JSF 2.0 annotations. Is there any information on when we'd want to use one over the other?

这是个好问题,但我不是 完全同意 到目前为止已发布的答案。

新的 EE Managed Beans 规范 定义了一个基本组件模型 Java EE 以及非常基本的 一组容器服务( @Resource@PostConstruct , @PreDestroy )。

这个想法是其他规范 (从 EJB、CDI、JSF 和 新的 Java 拦截器规范)构建于 这个基础组件模型和层 附加服务,例如 事务管理,类型安全 依赖注入(inject),拦截器。所以 在这个级别,托管 Bean、CDI、 拦截器和 EJB 规范 所有工作都齐头并进,并且高度 互补。

现在,托管 Bean 规范 就以下方面来说是相当开放的 准确识别哪些类 托管 bean 。它确实提供了 @ManagedBean注释一体 机制,但它也允许其他 规范来定义不同的 机制。因此,例如:

  • EJB 规范规定类遵循一定的编程规则 @Stateless 的限制或者 @Stateful注释部署在 EJB jar 是一个托管 bean。

  • CDI 规范规定任何具有适当构造函数的类 部署在“bean 部署 archive”是一个托管 bean。

鉴于 EJB 和 CDI 提供 可以说是更方便的方法 识别托管 bean,您可能 想知道到底是什么@ManagedBean是 需要.答案,正如所提到的 作者:Dan,如果您患有 CDI 在您的环境中可用(对于 例如,如果您使用 EE6),那么 @ManagedBean只是不是真的 需要。 <强> @ManagedBean真的在那里 供使用 JSF2 的人员使用 没有 CDI。

OTOH,如果您确实注释了 bean @ManagedBean ,并且您确实有 CDI 您的环境,您仍然可以使用 CDI 将东西注入(inject)到你的 bean 中。 只是@ManagedBean 在此不需要注释 案例。

总而言之,如果您确实患有 CDI 可供您使用,它提供了 优于 @ManagedBean/@ManagedProperty模型 JSF2 继承自 JSF1。所以 事实上,EE 6 网络更优越 配置文件不需要支持 @ManagedProperty等等。这个想法是 你应该使用 CDI 来代替。

关于jsf - @ManagedBeans 在 JavaEE6 中是否因为 CDI/Weld 中的 @Named 而过时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2930889/

26 4 0