【问题标题】:Alternative CDI injection not working as expected替代 CDI 注入未按预期工作
【发布时间】:2019-06-12 14:20:26
【问题描述】:

我有两个实现接口的类。注释为@Default@Named。另一个注解为@Alternative

@Default
@Named
public class ListService implements IListService {
    @Override
    public void doSomething()
       print("default");
    }
}

@Alternative
public class ListServiceMock extends BaseServiceMock implements IListService {
    @Override
    public void doSomething()
       print("mock");
    }

}

注入是这样发生的:

public class SomeNavigator extends AbstractNavigator {

    private IListService listService;

    @Inject
    public SomeNavigator(IListService listService) {
        this.listService = listService;
    }

    public void doNavigate() {
       this.listService.doSomething(); // Always prints "mock"
    }
}

我的beans.xml 文件在 /src/main/webapp/WEB-INF/beans.xml 中,项目由 Maven 构建并打包为 war 文件并部署到 JBoss EAP 6.3.3.GA (在 Docker 容器中)

我相信如果我将替代 bean ListServiceMock 包含在 beans.xml 文件中,只有会被注入,如下所示:

<?xml version="1.0"?>
<beans bean-discovery-mode="all" version="1.1"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:weld="http://jboss.org/schema/weld/beans"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                     http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd">

    <alternatives>
        <class>service.alternative.ListServiceMock</class>
    </alternatives>
</beans>

但是,无论该部分是否在 beans.xml 中,始终使用替代 bean。

在这种情况下,beans.xml 文件似乎被忽略,而替代 bean总是被选择进行注入,是否有原因?

【问题讨论】:

    标签: java cdi jboss7.x


    【解决方案1】:

    似乎与beans.xml 文件中的XML 命名空间有关。我切换到这些命名空间,它现在可以工作了。

    <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
          http://java.sun.com/xml/ns/javaee 
          http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
    

    【讨论】:

      猜你喜欢
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多