我有一个POJO,我想将它注入到CDI中。现在,我可以将beans.xml中的发现模式从“带注释的”更改为“all”。但是我也可以给我的POJO一个bean定义注释。我想任何注释都会起作用,但我想知道,什么是正确的注释,仅仅是为了使我的POJO可注入的唯一目的?
发布于 2016-06-16 09:19:36
@依赖性将在每个注入点上为该bean创建一个新实例。通常是干扰最少的。
http://docs.oracle.com/javaee/7/api/javax/enterprise/context/Dependent.html
发布于 2016-06-16 22:08:38
假设您希望继续使用bean发现模式annotated
,您需要在POJO上有一个bean定义的注释,这将使它成为所谓的implicit bean
。这是来自CDI规范的相关报价
一组bean定义注释包含:
至于,哪个注释是正确的,-这取决于您的用例。通常,您需要考虑bean的生命周期(请求、会话、应用程序作用域,只要应用程序存在)。但是如果你真的不在乎的话,我会说去找@Dependent
吧。实际上,如果您有bean发现模式all
,并且没有对POJO类进行注释,那么CDI无论如何都会将它作为@Dependent
来获取。
希望这能回答问题。
发布于 2016-06-16 13:49:09
您可能根本没有注释,不需要任何注释来使您的bean可注入(即使其成为托管的或cdi )。
为了注入类,应该是:
@Decorator
类@Inject
注释的no-arg构造函数或构造函数。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目录中。
https://stackoverflow.com/questions/37861509
复制相似问题