Что вы, вероятно, ищете, так это использование фабрики Guice. Особенно легко с функциональностью AssistedInject
, но у них есть ручной пример в верхней части страницы . Суть в том, что касается ручного примера, это то, что вы получаете фабрику нестатическим методом getFoo
, который передает все необходимые параметры и строит объект оттуда.
Это не будет работать напрямую, если у вас есть перехват метода в Foo
, но это будет работать во многих других случаях.
Чтобы использовать AssistedInject
, который для меня имеет несколько более чистую семантику и означает меньшую ручную разводку, вам потребуется расширение guice-assistedinject в classpath, а затем при создании Foo
(ну, FooImpl
, мы должны использовать интерфейсы):
@Inject
public FooImpl(@Assisted String bar)
{
this.baz = bar;
}
Затем вы создаете FooFactory
интерфейс:
public interface FooFactory {
public Foo create(String bar);
}
Тогда в вашем модуле guice:
install(new FactoryModuleBuilder()
.implement(Foo.class, FooImpl.class)
.build(FooFactory.class));
Вы можете проверить javadoc для FactoryModuleBuilder
для примеров с более сложными фабриками.