Я работал с документацией Джина: я процитирую это здесь:
Джин "Волшебство" Джин пытается сделать инъекцию безболезненной и удалить как можно больше шаблонного кода из вашего кода.Для этого в сгенерированном коде есть некое волшебство за кулисами, которое объясняется здесь.
Отложенное связывание Один из способов, которым Джин оптимизирует код, заключается в автоматизации отложенного связывания GWT.Поэтому, если вы внедряете интерфейс или class1, привязанные через отложенное связывание (но не через привязку Guice / Gin), Gin внутренне вызовет GWT.create для него и внедрит результат.Одним из примеров являются сообщения и константы GWT (используемые для целей i18n):
public interface MyConstants extends Constants {
String myWords();
}
public class MyWidget {
@Inject
public MyWidget(MyConstants myconstants) {
// The injected constants object will be fully initialized -
// GWT.create has been called on it and no further work is necessary.
}
}
Примечание. Gin не будет связывать экземпляры, созданные с помощью GWT.create, в одноэлементной области.Это не должно приводить к ненужным накладным расходам, поскольку генераторы отложенного связывания обычно реализуют одноэлементные шаблоны в своем сгенерированном коде.
Вы можете убедиться сами в этом URL: http://code.google.com/p/google-gin/wiki/GinTutorial
Не упоминается, почему синглтон не может быть автоматически сгенерирован с помощью отложенной привязки и введен.
Это можно исправить с помощью ручного создания, используя GWT.create(YourFactoryInterface.class).getProductList()
в конструкторе.
Это означает для проверки целей,вам нужно будет перетащить GWT.create в отдельный метод, переопределить его в подклассе и использовать его для тестирования, например:
YourFactoryInterface getFactory() {
return GWT.create(YourFactoryInterface.class)
}
и
getFactory().getProductList()