IT源码网

jsf之为什么有不同的bean管理注解

mengfanrong 2024年11月01日 程序员 82 0

有什么区别

import javax.annotation.ManagedBean; 
import javax.enterprise.context.SessionScoped; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 

请您参考如下方法:

  1. javax.enterprise.context.SessionScoped( JSR 346 ) 以及 javax.enterprise.context.* 包下的所有其他注释都维护 CDI 的上下文。 。 CDI 为 Java EE 空间内的依赖注入(inject)、bean 和通用资源管理提供了一种替代的、通用的、更强大的机制。它是 JSF 托管 bean 的替代方案,甚至将取代 coming version of JSF 中的 JSF bean 管理机制。 。

    目前,JSF 和 CDI 带注释的 bean 在任何给定的 Java EE Web 应用程序中都可以互换(有一些小的限制)。然而,CDI 带注释的 bean 远远超出了 Web 层的范围,这就是 Java EE 规范不断发展以使 CDI 成为标准 bean 和 DI 机制的原因。

    虽然 CDI 可能是所有 Java EE 开发的明显选择,但 JSF 托管 bean 可以跨 servlet 容器 (Tomcat) 和应用程序服务器(Glassfish、JBoss 等)移植。 CDI bean 只能存在于完整的应用程序服务器中。与some legwork但是,Tomcat 7 可以连接以支持 CDI。

    具体来说,javax.enterprise.context.SessionScoped 是 CDI 内 JSF Session Scope 的并行实现。

  2. javax.faces.bean.SessionScoped ( JSR 314 ) 和 javax.faces.bean.* 包下的所有其他注释维护 JSF 特定的依赖项注入(inject)和 Bean 管理机制。然而,使用 JSF 注释进行注释的 Bean 仅在 Web 层中有用。 JSF 注释可用的所有范围都已在 CDI 规范中复制。

  3. javax.annotation.ManagedBean ( JSR 316 ) 和 javax.annotation.* 下的其他 DI 相关注释是试图将基于 JSF 的注释概括为 Java EE 规范中的其他用途,最终开发人员确实不应该使用。

它们为何存在?在我看来,从 JSF beans 到 CDI beans 的转变是该技术的自然演变。 JSF bean 运行良好,但 Spring、Guice 和 Seam 等产品显然表明该技术还不够。还需要弥合 Web 组件和 EJB 之间的差距,而满足该需求的就是 CDI。

另请参阅这些相关问题:


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!