首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >对于可注入的java类,正确的注释是什么?

对于可注入的java类,正确的注释是什么?
EN

Stack Overflow用户
提问于 2016-06-16 14:02:46
回答 3查看 1.7K关注 0票数 1

我有一个POJO,我想将它注入到CDI中。现在,我可以将beans.xml中的发现模式从“带注释的”更改为“all”。但是我也可以给我的POJO一个bean定义注释。我想任何注释都会起作用,但我想知道,什么是正确的注释,仅仅是为了使我的POJO可注入的唯一目的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-16 17:19:36

@依赖性将在每个注入点上为该bean创建一个新实例。通常是干扰最少的。

http://docs.oracle.com/javaee/7/api/javax/enterprise/context/Dependent.html

票数 2
EN

Stack Overflow用户

发布于 2016-06-17 06:08:38

假设您希望继续使用bean发现模式annotated,您需要在POJO上有一个bean定义的注释,这将使它成为所谓的implicit bean。这是来自CDI规范的相关报价

一组bean定义注释包含:

  • @ApplicationScoped、@SessionScoped、@ConversationScoped和@RequestScoped注释,
  • 所有其他正常范围类型,
  • @Interceptor和@Decorator注释,
  • 所有原型注解(即带有@原型注释的注解),
  • 以及@依赖范围注释。

至于,哪个注释是正确的,-这取决于您的用例。通常,您需要考虑bean的生命周期(请求、会话、应用程序作用域,只要应用程序存在)。但是如果你真的不在乎的话,我会说去找@Dependent吧。实际上,如果您有bean发现模式all,并且没有对POJO类进行注释,那么CDI无论如何都会将它作为@Dependent来获取。

希望这能回答问题。

票数 2
EN

Stack Overflow用户

发布于 2016-06-16 21:49:09

您可能根本没有注释,不需要任何注释来使您的bean可注入(即使其成为托管的或cdi )。

为了注入类,应该是:

  • 具体类(即非抽象类或接口类)或应注释为@Decorator
  • 应该有带@Inject注释的no-arg构造函数或构造函数。
  • 不应该用EJB组件进行注释--定义注释,或者在ejb-jar.xml中声明为EJB类。

所以你可以注射,几乎,所有的“正常”类。另外,类应该位于bean存档中。从CDI1.1开始,有两种类型的bean归档:隐式和显式。来自Oracle文档:

显式bean存档是包含一个beans.xml部署描述符的归档文件,它可以是一个空文件,不包含版本号,也可以包含版本号1.1,并将bean发现模式属性设置为all。例如: 1.xsd“version="1.1”bean -version=-mode=“all”>. CDI可以在显式存档中管理和注入任何bean,但带有@Vetoed注释的bean除外。 隐式bean归档是包含带作用域类型注释的某些bean、不包含beans.xml部署描述符或包含一个beans.xml部署描述符的归档文件,该文件的bean发现模式属性设置为带注释的。 在隐式存档中,CDI只能管理和注入带有作用域类型注释的bean。 对于web应用程序,如果存在beans.xml部署描述符,则必须位于WEB目录中。对于EJB模块或JAR文件,如果存在beans.xml部署描述符,则必须位于META目录中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37861509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档