我正在研究java中的依赖注入示例,大多数文档都强调我必须将空beans.xml
放在
所以,我使用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();
}
}
答案 0 :(得分:3)
这取决于您使用注释的位置。如果您的Web模块中有EJB bean并且正在这些bean中使用注入,那么您需要beans.xml
中的META-INF
,就像纯ejb模块一样。如果您在Web组件(servlet,过滤器,JSF bean)中使用CDI注入,那么您必须在WEB-INF
中使用它。您可能也需要在两个地方使用它们(如果从两种组件中使用)。