Google Guice:使用注入工厂实例化一个class中的多个对象?

Google Guice: use injected factory to instantiate multiple objects in a class?

public class AppModule extends AbstractModule {
    @Override
    protected void configure() {
        install(new FactoryModuleBuilder().implement(BaseClass.class, ImplementingClass.class).build(FactoryClass.class));
    }
}

public class AnotherClass {
    @Inject
    private FactoryClass factoryClass;

    private BaseClass firstBaseObject = factoryClass.create("some_parameter");
    private BaseClass secondBaseObject = factoryClass.create("another_parameter");

    public void processSomething() {
        // ... do something that requires both firstBaseObject and secondBaseObject to already be initialized on each call
    }
}

有没有办法让我在每次调用 processSomething() 时都可以访问 firstBaseObjectsecondBaseObjectprocessSomething() 的每次调用都依赖于这两个已经实例化的对象,它们是具有大量元数据的巨大对象。也就是说,我能以某种方式确保 factoryClass 在命中这两行时已经实例化了吗?:

    private BaseClass firstBaseObject = factoryClass.create("some_parameter");
    private BaseClass secondBaseObject = factoryClass.create("another_parameter");

我在这两行上收到 NullPointerExceptions,因为 factoryClass 为空。

如果您需要更多信息,请告诉我,非常感谢!

使用以下代码

public class AnotherClass {
    private final BaseClass firstBaseObject;
    private final BaseClass secondBaseObject;

    @Inject
    public AnotherClass(FactoryClass factoryClass) {
       firstBaseObject = factoryClass.create("some_parameter");
       secondBaseObject = factoryClass.create("another_parameter");
    }

    public void processSomething() {
        // ... do something that requires both firstBaseObject and secondBaseObject to already be initialized on each call
    }
}

不能使用字段或方法注入,因为 factoryClass 中的注入是在填充 firstBaseObject 和 secondBaseObject 之后。

public class AppModule extends AbstractModule {
    @Override
    protected void configure() {
        ...
        bind(BaseClass.class)
        .annotatedWith(Names.named("firstBaseObject"))
        .toInstance(factoryClass.create("some_parameter"));

        bind(BaseClass.class)
        .annotatedWith(Names.named("secondBaseObject"))
        .toInstance(factoryClass.create("another_parameter"));
    }
}

public class AnotherClass {
    @Inject
    @Named("firstBaseObject")
    private BaseClass firstBaseObject;
    @Inject
    @Named("secondBaseObject")
    private BaseClass secondBaseObject;

    public void processSomething() {
        // ... do something that requires both firstBaseObject and secondBaseObject to already be initialized on each call
    }
}