Мы сталкиваемся со странными проблемами внедрения в Widfly из-за изменений CDI. У нас есть интерфейс
public interface Command<I, O> {
}
и многие классы реализуют этот интерфейс следующим образом
public class ApproveUserRequests implements Command<ApproveUserRequestsRequest, List<String>> {
}
Классы прослушивателя приложений любят получать список всех доступных классов и используют инъекцию, подобную этой.
@Inject
private Instance<Command<I, O>> mActions;
Однако экземпляр, возвращаемый mActions, всегда был нулевым. После отладки исходный код обнаружил, что единственный способ получить список всех экземпляров — использовать
@Inject
private Instance<Command<?, ?>> mActions;
Также мы столкнулись с проблемами внедрения при использовании универсальных типов, однако нам помогло использование подстановочного знака. – Подробнее см. на странице: https://developer.jboss.org/thread/256783#sthash.1s6tuXsR.dpuf
Instance<Command<I,O>>
с несвязанными переменными типа даже не скомпилируется. - person Harald Wellmann   schedule 05.05.2015