我的Web应用程序仅适用于META-INF而不是WEB-INF,包括beans.xml。为什么?

时间:2014-12-29 05:18:08

标签: java-ee cdi wildfly-8 meta-inf

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

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

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

这是我简单的pom.xml

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

此外,您还可以看到我仅用于注入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();
    }
}

1 个答案:

答案 0 :(得分:3)

这取决于您使用注释的位置。如果您的Web模块中有EJB bean并且正在这些bean中使用注入,那么您需要beans.xml中的META-INF,就像纯ejb模块一样。如果您在Web组件(servlet,过滤器,JSF bean)中使用CDI注入,那么您必须在WEB-INF中使用它。您可能也需要在两个地方使用它们(如果从两种组件中使用)。