Dependency injection GoogleGuice-如何将参数传递给第三方库工厂类
我正在尝试从Spring迁移到Guice以进行依赖项注入。以下是来自Spring xml配置的示例代码段: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
<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的用法。您的第二个示例正是我想要做的,基本上是在配置时从文件加载属性并将它们传递到工厂。