Передайте инжектор всем подклассам и затем используйте
injector.getInstance (...) для создания подклассов?
нет, тем самым вы побеждаете цель шаблона внедрение зависимостей , а также связываете всю свою реализацию с Guice. Ваши реализации не должны вообще взаимодействовать с guice, кроме как через (теперь стандартизированные) аннотации.
Установить новый инжектор, например
TestConfiguration config = new TestConfiguration();
Injector injector = Guice.createInjector(config);
TestImpl test = injector.getInstance(TestImpl.class);
во всех вложенных классах?
нет, и это еще хуже, потому что у вас будет несколько инжекторов, следовательно, несколько контекстов, которые будут препятствовать правильному использованию областей .
В идеале, вы должны использовать инжектор только во время начальной загрузки вашего приложения. Конечно, способ его загрузки во многом будет зависеть от приложения.
Есть ли другой способ сделать свойства доступными во всех
классы?
Свойства могут быть введены так же, как вы делали это для TestImpl.
Если вы хотите, чтобы TestImpl использовал, скажем, сервис, которому также нужны некоторые свойства (или другие сервисы), просто позвольте Guice внедрить его в TestImpl. Guice позаботится обо всех экземплярах и проводках. Вы должны указывать Guice «как действовать», используя связыватель, когда Guice сам не может понять это:
public class TestImpl {
private final String property1;
private final Integer property2;
private final IService service;
@Inject
public TestImpl(@Named("Property1") String property1, @Named("Property2") Integer property2, IService service) {
this.property1 = property1;
this.property2 = property2;
this.service= service;
}
}
}