Dependency injection GoogleGuice-如何将参数传递给第三方库工厂类

Dependency injection GoogleGuice-如何将参数传递给第三方库工厂类,dependency-injection,guice,Dependency Injection,Guice,我正在尝试从Spring迁移到Guice以进行依赖项注入。以下是来自Spring xml配置的示例代码段: <bean id="connectionFactory" class="org.somethirdparty.MyConnectionFactory"> <property name="connectionUrl" value="${urls.connectionUrl}"/> <property name="ackMode" value="unord

我正在尝试从Spring迁移到Guice以进行依赖项注入。以下是来自Spring xml配置的示例代码段:

<bean id="connectionFactory" class="org.somethirdparty.MyConnectionFactory">
  <property name="connectionUrl" value="${urls.connectionUrl}"/>
  <property name="ackMode" value="unordered"/>
  <property name="timeout" ref="timeoutBean"/>
</bean>

<bean id="timeoutBean" class="java.lang.Integer">
  <constructor-arg value="10000"/>
</bean>

我正在努力弄清楚如何用GoogleGuice参数化MyConnectionFactory。我无法对“MyConnectionFactory”的构造函数或方法进行注释,因为这是由第三方库提供的类


在读了这本书之后,在我看来,唯一的选择就是为工厂建造一座工厂?我觉得那很傻

您可能需要为MyConnectionFactory创建一个工厂,但前提是您确实需要在运行时更改传递给MyConnectionFactory的参数。否则,你可以做一个
供应商
——我想这毕竟是一个工厂,或者是它更苗条的表亲。(我猜所讨论的类接受非特定的或原始的参数,否则a是另一种可能性。)

工厂看起来是这样的:

public class MyConnectionFactoryFactory {
  @Inject Provider<SomeDependency> someDependencyProvider;

  public MyConnectionFactory create(String url) {
    return new MyConnectionFactory(someDependencyProvider.get(), url, 10000);
  }
}
public class MyModule extends AbstractModule {
  @Override public void configure() { /* your configuration here */ }

  /* FYI: a @Provides method by any other name would return as sweet */
  @Provides MyConnectionFactory getConnectionFactory(SomeDependency dependency) {
    return new MyConnectionFactory(dependency, url, 10000);
  }
}

…这会将“包装器代码”样板文件增加三行非空白行。请记住,Guice会自动将
X
Provider
、或
@Provider X
的任意组合绑定到
X
Provider
的任何注入中,因此您可以随意绑定,但这是最方便的。

仍然没有人回答这个问题吗?:(非常感谢,我似乎误解了@Provides的用法。您的第二个示例正是我想要做的,基本上是在配置时从文件加载属性并将它们传递到工厂。