从CDI教程中,我发现了各种示例,并希望使用它们将一些对象注入EJB(即,我想注入一个Neo4J connector GraphDatabaseService
)。所以,我有一个目标EJB:
@Stateless
public class Neo4JEJB implements Neo4JEJBInterface{
private @Inject @Named("the bidule") String bidule = "no bidule injected";
}
包含生产者方法的生产者类
public class Producer {
public @Produces @Named("the bidule") String createBidulateur() {
return "the bidule that should always work";
}
}
但是,到目前为止,我一直无法看到我的bidule
字段具有正确的值。
我有什么问题吗?
答案 0 :(得分:4)
首先,您使用的是@Named
,就像旧的Seam @Name
一样。这两个注释有两个不同的目的。在CDI中,@Named
仅用于提供可用于从facelet中引用bean的名称。在注入时,bean由 type 标识,并可选择使用限定符。由于您正在注射String
,因此最有可能需要限定符。您可以按照here所述创建限定符注释,并使用它注释您的生产者和注入点:
如果您创建了限定符@Bidule
@Stateless
public class Neo4JEJB implements Neo4JEJBInterface{
private @Inject @Bidule String bidule = "no bidule injected";
}
public class Producer {
public @Produces @Bidule String createBidulateur() {
return "the bidule that should always work";
}
}
另外,我认为(但不确定)包含producer方法的bean需要作用域(see here)。