【问题标题】:why @Inject cannot work but @EJB works in JavaEE 7?为什么@Inject 不能工作但@EJB 在JavaEE 7 中工作?
【发布时间】:2014-11-26 18:41:31
【问题描述】:

我正在通过github 中的JavaEE7-samples 回购。我发现作者在这个code snippet中提到了以下内容:

// Cannot be injected using @Inject
@EJB Cart bean;

作者明确提到@Inject 不起作用。但我想知道这背后的原因是什么?

我已阅读以下关于@EJB@Inject 之间区别的帖子。但这对我没有帮助。

http://www.adam-bien.com/roller/abien/entry/inject_vs_ejb

What is the difference between @Inject and @EJB

Should I use @EJB or @Inject

【问题讨论】:

    标签: ejb java-ee-7 inject


    【解决方案1】:

    如果 bean 有 Local 接口,两者都可以工作。但是,要使 @Inject 工作,您必须启用 CDI(在您的 WEB-INF 文件夹中创建 beans.xml 文件)。

    如果 bean 有 Remote 接口,您需要有生产者类来使用以下代码声明资源:

    public class RemoteProducer {
        @Produces @EJB
        HelloRemote helloBean;
    }
    

    有关更多详细信息,请参阅JSR-299 CDI specification 中的第 3.5 节。
    因此,为了简单起见,我建议将 @EJB 用于 EJB。

    【讨论】:

    • 我猜你不需要我正在使用的 Java EE 7 容器中的 beans.xml。
    • @brainstorm 啊,你可能是对的。我已经在 J​​ava EE 6 容器中对其进行了测试。
    • 并且上面的 javaee7-samples 链接是针对 javaee7 进行测试的。所以我仍然不明白为什么@Inject 不起作用..
    • @brainstorm 除了 beans.xml 在 Java EE 7 中的某些情况下可以是可选的,其余的答案都成立。您可以查看 CDI 1.1 规范 (jsr-346) - 对于 Remote EJB,您需要 Producer 字段或方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2017-11-02
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    相关资源
    最近更新 更多