gpt4 book ai didi

java - 使用 Guice 将参数传递给构造函数

转载 作者:IT老高 更新时间:2023-10-28 21:02:31 25 4
gpt4 key购买 nike

我有一个工厂如下,

public final class Application {

private static IFoo foo;

public static IFoo getFoo(String bar)
{
// i need to inject bar to the constructor of Foo
// obvious i have to do something, not sure what
Injector injector = Guice.createInjector();
logger = injector.getInstance(Foo.class);
return logger;
}

}

这是 Foo 的定义:

class Foo
{
Foo(String bar)
{

}

}

好的。我不确定如何使用 Guice 将此参数传递给 Foo 构造函数?

有什么想法吗?

最佳答案

所有“Guice 构造函数参数”的答案在某种程度上似乎都不完整。这是一个完整的解决方案,包括用法和视觉效果:

enter image description here

interface FooInterface {
String getFooName();
}

//在实现类上注解构造函数和辅助参数

class Foo implements FooInterface {
String bar;

@Inject
Foo(@Assisted String bar) {
this.bar = bar;
}

// return the final name
public String getFooName() {
return this.bar;
}

}

//使用仅接受辅助参数的 create() 方法创建工厂接口(interface)。

//FooFactory 接口(interface)没有明确的实现类(Guice Magic)

interface FooFactory {
Foo create(String bar);
}

//将该工厂绑定(bind)到由 AssistedInject 创建的提供程序

class BinderModule implements Module {

public void configure(Binder binder) {
binder.install(new FactoryModuleBuilder()
.implement(FooInterface.class, Foo.class)
.build(FooFactory.class));
}
}

//现在使用它:

class FooAction {
@Inject private FooFactory fooFactory;

public String doFoo() {
// Send bar details through the Factory, not the "injector"
Foo f = fooFactory.create("This foo is named bar. How lovely!");
return f.getFooName(); // "This foo is named bar. How lovely!"
}
}

这里有很多帮助:https://google.github.io/guice/api-docs/latest/javadoc/index.html?com/google/inject/assistedinject/FactoryModuleBuilder.html

关于java - 使用 Guice 将参数传递给构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9237996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com