У меня интерфейс как
public interface ConfFileLoader {
public Map<String, Object> getResultMap() throws SecurityException, IOException;
}
и класс, который реализует его как
public class ConfYamlLoader implements ConfFileLoader{
@Override
public Map<String, Object> getResultMap() throws SecurityException, IOException {
}
}
и имеет класс инжектора как
public class AppInjector extends AbstractModule {
@Override
public void configure() {
bind(ConfFileLoader.class).to(ConfYamlLoader.class);
}
}
Теперь проблема в том, что у меня есть класс как
public class TI {
@Inject
private ConfFileLoader confFileLoader;
public void test(){
System.out.println("yeah tesrintY>>>>>>>>>>>>>>>>>>>"+confFileLoader);
}
}
и это дает исключение, поскольку
Exception in thread "main" com.google.inject.ConfigurationException: Guice configuration errors:
1) No implementation for com.exzeo.conf.ConfFileLoader was bound.
while locating com.exzeo.conf.ConfFileLoader
for field at com.exzeo.automate.HCPCI.TI.confFileLoader(TI.java:10)
while locating com.exzeo.automate.HCPCI.TI
но когда я использую @ConfYamlLoader, он отлично работает как
public class TI {
@Inject
private ConfYamlLoader confFileLoader;
public void test(){
System.out.println("yeah tesrintY>>>>>>>>>>>>>>>>>>>"+confFileLoader);
}
}
Этот класс выше работает нормально
Итак, в ходе расследования я обнаружил, что когда я добавляю @implemetedby в ConfFileLoader, он отлично работает как
@ImplementedBy(ConfYamlLoader.class)
public interface ConfFileLoader {
public Map<String, Object> getResultMap() throws SecurityException, IOException;
}
Я не могу понять этого поведения, поэтому мне нужно делать @ImplementedBy, если я уже привязываю его в модуле привязки. Насколько я понимаю, @implementedby является равносильным для bind ().
Сообщите мне, если я что-то упустил и использую guice версии 3
AppInjector
вGuice.createInjector()
. - person Vladimir Matveev   schedule 20.03.2015guicex.ConfYamlLoader@5dbc26ee
при вызовеtest()
метода. - person Vladimir Matveev   schedule 20.03.2015