Java EE 6 Bean 管理:@ManagedBean、@Inject 和 @Named 综合指南
Java EE 6 引入了无数bean 管理和依赖注入的注释,造成了一些混乱。本指南旨在阐明 @javax.annotation.ManagedBean、@javax.inject.Named、@javax.faces.ManagedBean 和 @javax.inject.Inject 的复杂性并建立清晰的使用指南。
了解 Java EE 6 中的 Bean 类型
托管 Bean 是具有生命周期的对象由容器管理。 Java EE 6 具有管理自己的 Bean 类型的各种容器:
何时使用每个注解
@javax.annotation.ManagedBean
此注解声明由 EJB 容器管理的 bean。它用于为 EJB 应用程序创建托管 Bean。
@javax.inject.Named 与 @javax.faces.ManagedBean
这两个注释都标识可以按名称引用。 @javax.inject.Named 用于 CDI 和 EJB beans,而 @javax.faces.ManagedBean 专门用于 JSF beans。
@javax .inject.Inject
该注解用于CDI中的依赖注入和 EJB 上下文。它将 bean 注入其他 bean,允许它们访问必要的依赖项。
示例用法
EJB:
@Stateless @ManagedBean public class MyEJB { ... }
CDI:
@Named("myBean") @RequestScoped public class MyBean { @Inject private MyService service; ... }
JSF:
@ManagedBean(name="myManagedBean") @RequestScoped public class MyManagedBean { ... }
选择正确的 Bean
永远不要使用 @javax.faces.ManagedBean,除非对于不支持 CDI 的 servlet 容器有必要。
使用 CDI beans对于大多数场景,除非您需要 EJB 的高级功能,例如事务管理或状态
当您需要访问远程或本地 EJB、管理分布式事务以及利用高级企业功能时,请使用 EJB。
用于 @ViewScoped 支持CDI,考虑使用兼容的库,如接缝面或 MyFaces CODI,或选择 @ViewAccessScoped 或@ConversationScoped。
以上是您应该使用哪些 Java EE 6 注释来进行 Bean 管理和依赖项注入?的详细内容。更多信息请关注PHP中文网其他相关文章!