3

我正在研究 java 中的依赖注入示例,大多数文档都强调我必须在其中放置一个beans.xml

  • META-INF 如果是 jar 应用程序
  • WEB-INF 如果是 Web 应用程序

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

这是我的简单pom.xml

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

同样在这里你可以看到我只使用了哪些注解来注入 bean。

自动服务.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();
    }
}
4

1 回答 1

3

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

于 2014-12-29T14:18:11.457 回答