beans.xml 应该放在哪里?

Posted

技术标签:

【中文标题】beans.xml 应该放在哪里?【英文标题】:Where should beans.xml be placed? 【发布时间】:2012-02-17 23:29:29 【问题描述】:

我刚刚从 7.0 升级到 NetBeans 7.1。在打开 JSF 托管 bean 时,它“有用地”告诉我它找不到我的 beans.xml 文件,所以我希望它为我创建。我知道我在 WEB-INF 下有一个 beans.xml 文件,但我还是答应了,看看发生了什么。在 META-INF 下为我创建了一个新 beans.xml。

我认为我犯了一个错误,我删除了 WEB-INF 下的文件,只是为了让我的应用程序在启动时失败。将 beans.xml 放回 WEB-INF 解决了这个问题。此页面似乎认为这两个位置都有效:http://seamframework.org/Documentation/WhatIsBeansxmlAndWhyDoINeedIt

那么,问题是 beans.xml 应该放在 WEB-INF 还是 META-INF 中?

我正在运行 GlassFish 3.1.1 和 Java 7

【问题讨论】:

【参考方案1】:

在您的情况下,将 beans.xml 放置到 WEB-INF 目录中很好,因为很可能 bean 位于 WEB-INF 类下。

beans.xml 的正确位置取决于归档类型和 bean 类的位置。

在规范中是这样解释的:

已启用 bean 的 Bean 类必须部署在 bean 档案中。

如果库 jar、EJB jar、应用程序客户端 jar 或 rar 归档在 META-INF 目录中有一个名为 beans.xml 的文件,那么它就是一个 bean 归档。 如果战争的 WEB-INF 目录中有一个名为 beans.xml 的文件,那么战争的 WEB-INF/classes 目录就是一个 bean 存档。 如果 JVM 类路径中的目录在 META-INF 目录中有一个名为 beans.xml 的文件,那么它就是一个 bean 存档。

【讨论】:

很好的回答谢谢,教会了我一些新东西。我怀疑 NetBeans 在这种情况下是错误的。 答案帮助我理解了我在 servlet 中使用 @Inject 时遇到的异常 javax.enterprise.inject.UnsatisfiedResolutionException: Api type ... 异常。我将 beans.xml 放在 META-INF 而不是 WEB-INF 中。

以上是关于beans.xml 应该放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

c# 项目的图片文件应该放在哪里

我应该把函数放在哪里?

Lumen 中的业务逻辑应该放在哪里?

我应该把我的 DTO 放在哪里?

我应该如何构建一个 Java 应用程序,我应该把我的类放在哪里?

我应该把 AutoLayout 代码放在哪里?