为什么有不同的bean管理注释



之间有什么区别

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

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

  1. javax.enterprise.context.SessionScoped(JSR346)和javax.enterprise.context.*包下的所有其他注释维护CDI的上下文。CDI为Java EE空间中的依赖注入、bean和一般资源管理提供了一种替代的、通用的、更强大的机制。它是JSF托管bean的一种替代方案,甚至将在即将到来的JSF版本中取代JSFbean管理机制。

    目前,JSF和CDI注释的bean在任何给定的JavaEEWeb应用程序中都是可互换的(有一些小的限制)。然而,CDI注释的bean远远超出了web层的领域,这就是为什么JavaEE规范正在发展,使CDI成为标准的bean和DI机制。

    虽然CDI可能是所有Java EE开发的一个明显选择,但JSF管理的bean可以跨servlet容器(Tomcat)和应用程序服务器(Glassfish、JBoss等)进行移植。CDI bean只能在完整的应用程序服务器中运行。然而,通过一些跑腿工作,Tomcat7可以连接以支持CDI。

    具体来说,javax.enterprise.context.SessionScoped是CDI中JSF会话范围的并行实现。

  2. javax.faces.bean.SessionScoped(JSR314)和javax.faces.bean.*包下的所有其他注释维护JSF特定的依赖注入和bean管理机制。然而,用JSF注释注释的Beans只在web层中有用。JSF注释可用的所有作用域都已在CDI规范中复制。

  3. javax.annotation.ManagedBean(JSR316)和javax.annotation.*下的其他与DI相关的注释试图将基于JSF的注释推广到JavaEE规范中的其他用途,最终开发人员确实不应该使用这些注释。

它们为什么存在?嗯,IMO,从JSFbean到CDIBean的转变是该技术的自然演变。JSFbeans运行良好,但Spring、Guice和Seam等显然表明技术还不够。还需要弥合web组件和EJB之间的差距,对这种需求的回应是CDI。

请参阅以下相关问题:

  • JSF:支持bean(@ManagedBean)还是CDI-beans(@Named)
  • Java EE 6@javax.annotation.ManagedBean与@javax.inject.Named与@javax.faces.ManagedBean

相关内容

  • 没有找到相关文章

最新更新