У меня есть следующие реализации для (2.18) приложений Джерси:Нет объектов для ошибок впрыска при использовании bindFactory
public class RootApplication extends ResourceConfig {
public RootApplication() {
packages("com.foo.bar");
register(new AbstractBinder() {
@Override
protected void configure() {
bindFactory(RepositoryFactory.class).to(Repository.class);
// if I use following line instead of bindFactory it works
// bind(OracleRepository.class).to(Repository.class);
}
});
}
public class RepositoryFactory implements Factory<Repository> {
private final Repository repo;
public RepositoryFactory() {
this.repo = new OracleRepository();
}
@Override
public Repository provide() {
return repo;
}
@Override
public void dispose(Repository repo) {
}
}
}
и получить исключение ниже при попадании в службе, которая впрыскивает Repository
javax.servlet.ServletException: A MultiException has 3 exceptions. They are:
1. org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=Repository,parent=MeasureService,qualifiers={},position=-1,optional=false,self=false,unqualified=null,56464420)
2. java.lang.IllegalArgumentException: While attempting to resolve the dependencies of com.fidelity.pi.dashboard.rest.MeasureService errors were found
3. java.lang.IllegalStateException: Unable to perform operation: resolve on com.fidelity.pi.dashboard.rest.MeasureService
Все работает, если я прокомментирую bindFactory
и воспользуюсь комментируемым связыванием. Я что-то пропускаю с точки зрения реализации Factory? Исключение, похоже, произойдет еще до того, как будет удален конструктор RepositoryFactory
. Мне нужна фабрика, так как у меня есть другая инициализация, которую нужно сделать на примере OracleRepository
.
Спасибо за рабочий образец .. после немного назад и вперед я обнаружил причину ошибки, хотя я не совсем понял почему. Обратите внимание, что мой класс Factory не был статичным, и это, похоже, проблема. Аналогично это произойдет с образцом, который у вас выше, как только Factory не статичен. –
Ahhh. Я полностью не понял этого из вашего кода. Я думал, что это два разных файла. Да для внутренних классов они должны быть статическими. Я думаю, что класс не может быть создан с помощью фреймворка, если это не так. См. [Здесь] (http://stackoverflow.com/q/12690128/2587435) для некоторых интересных чтений по этому вопросу –