У меня есть два класса, которые реализуют интерфейс.Один отмечен как @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)
Я считаю, что альтернативный компонент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
или нетАльтернативный боб всегда используется.
Есть ли причина, по которой кажется, что файл beans.xml
игнорируется в этом случае, а альтернативный компонент всегда выбран для инъекции?