Есть ли способ внедрить конкретную реализацию возвращаемого интерфейса @Produces
?
SomeClassImpl implements SomeClass {
public Integer iField;
}
Класс производителя:
@Produces
public SomeClass produceChild(){
SomeClassImpl impl = new SomeClassImpl();
impl.iField = 17;
return impl;
}
Класс потребления:
@Inject SomeClassImpl classImpl;
ИЗМЕНИТЬ
Попытка @Inject SomeClassImpl
не заставляет контейнер использовать метод @Produces
, который возвращает супертип SomeClass
.
Почему можно внедрить дочерний тип через @Inject
parent-type (без Producer), но нет вариантов внедрить дочерний тип через @Produces
parent-type ?
@Produces
создает экземплярSomeClass
, а не экземплярSomeClassImpl
, который может возвращать любую реализациюSomeClass
, а не только экземплярыSomeClassImpl
. Вы можете исправить это, внедривSomeClass
(а не реализацию) и используя квалификатор, или изменив метод@Produces
, чтобы он возвращалSomeClassImpl
. - person blacktide   schedule 15.05.2016