gpt4 book ai didi

jakarta-ee - 我的网络应用程序仅适用于 META-INF 而不是包含 beans.xml 的 WEB-INF。为什么?

转载 作者:行者123 更新时间:2023-12-01 23:48:46 25 4
gpt4 key购买 nike

我正在研究 java 中的依赖注入(inject)示例,大多数文档都强调我必须在

中放入一个空的 beans.xml
  • META-INF 如果它是一个 jar 应用程序
  • WEB-INF,如果它是一个网络应用程序

所以,我使用 war 类型的打包,但是,只有当我将 beans.xml 放在 META-INF 文件夹中时,我的应用程序才能工作。我对它为什么以这种方式工作有点困惑?我将我的 war 文件部署在 JBOSS/WildFly 容器中。

这是我的简单 pom.xml

beans.xml 位于src/main/resources/META-INF

您还可以在这里看到我只使用了哪些注解来注入(inject) bean。

AutoService.java

public interface AutoService {
void getService();
}

BMWAutoService.java

@Named("bmwAutoService")
public class BMWAutoService implements AutoService{

@Override
public void getService() {
System.out.println("You chose BMW auto service");
}
}

AutoServiceCaller.java

@Named
public class AutoServiceCallerImp implements AutoServiceCaller{

private AutoService bmwAutoService;

@Inject
public AutoServiceCallerImp(@Named("bmwAutoService") AutoService bmwAutoService) {

this.bmwAutoService = bmwAutoService;
}

@Override
public void callAutoService() {
// get bmw's auto service
bmwAutoService.getService();
}
}

最佳答案

这取决于您在哪里使用注释。如果您的 Web 模块中有 EJB bean 并且在这些 bean 中使用注入(inject),那么您将需要在 META-INF 中包含 beans.xml,就像在纯 ejb 模块的情况。如果您在 Web 组件(servlet、过滤器、JSF bean)中使用 CDI 注入(inject),那么您必须将其包含在 WEB-INF 中。您可能还需要在两个地方使用它们(如果从两种组件中使用)。

关于jakarta-ee - 我的网络应用程序仅适用于 META-INF 而不是包含 beans.xml 的 WEB-INF。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27683753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com