繁体   English   中英

如何使用Google Guice创建需要参数的对象?

[英]How to use Google Guice to create objects that require parameters?

也许我只是盲目,但我不知道如何使用Guice(刚开始)来替换此方法中的new调用:

public boolean myMethod(String anInputValue) {
    Processor proc = new ProcessorImpl(anInputValue);
    return proc.isEnabled();
}

对于测试,可能有一个不同的处理器实现,所以我想避免new调用,并在此过程中摆脱对实现的依赖。

如果我的类只记得处理器的一个实例,我可以通过构造函数注入它,但由于处理器被设计为不可变的,我每次都需要一个新的。

我将如何使用Guice(2.0)实现这一目标?

自从我现在使用Guice以来已经有一段时间了,但我记得有一种叫做“辅助注射”的东西。 它允许您定义一个工厂方法,其中提供了一些参数并注入了一些参数。 您可以注入处理器工厂,而不是注入处理器工厂,该工厂具有采用anInputValue参数的工厂方法。

我指向FactoryProviderjavadoc 我相信它应该对你有用。

您可以通过注入“提供程序”来获得所需的效果,可以在运行时询问为您提供处理器。 提供者提供了一种在请求之前推迟构造对象的方法。

他们在这里这里的Guice Docs中都有涉及。

提供商看起来像

public class ProcessorProvider implements Provider<Processor> {
    public Processor get() {
        // construct and return a Processor
    }
}

由于提供者是由Guice构建和注入的,因此他们自己可以注入比特。

你的代码看起来像

@Inject
public MyClass(ProcessorProvider processorProvider) {
    this.processorProvider = processorProvider;
}

public boolean myMethod(String anInputValue) {
    return processorProvider.get().isEnabled(anInputValue);
}

您的处理器是否需要在整个生命周期内访问anInputValue 如果没有,可以将值传入您正在使用的方法调用,例如:

@Inject
public MyClass(Processor processor) {
    this.processor = processor;
}

public boolean myMethod(String anInputValue) {
    return processor.isEnabled(anInputValue);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM