@Produces如何在JavaEE上下文中工作?

时间:2011-08-08 08:18:03

标签: java java-ee cdi

从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字段具有正确的值。

我有什么问题吗?

1 个答案:

答案 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)。