gpt4 book ai didi

java - Guice:辅助注入(inject)和提供者

转载 作者:行者123 更新时间:2023-12-01 12:27:05 25 4
gpt4 key购买 nike

假设我有一个类如下:

public class ComplicatedImpl implements Complicated {
@Inject
public ComplicatedImpl(Integer normal, @Assisted String assisted);

public void addListener(Listener listener);
}

现在,我有一个像这样的ComplicatedFactory:

public interface ComplicatedFactory {
public Complicated build(String assisted);
}

是否可以在使用FactoryModuleBuilder时绑定(bind)一个ComplicatedFactory,这样,当调用build()时,我们会执行等效的操作的

ComplicatedImpl impl = new ComplicatedImpl(normal, assisted);
impl.addListener(listener);
return impl;

而不是直接返回新的 ComplicatedImpl 的正常情况?

我一直在尝试将ComplicatedImpl绑定(bind)到某种形式的Provider,但似乎我会一直在兜圈子......

最佳答案

我不相信这在 Guice 中是可能的; FactoryModuleBuilder除了将显式构造函数参数与依赖项混合之外,几乎不能做任何事情。幸运的是,编写手动工厂相对容易:

public class ListeningComplicatedFactory {
@Inject Provider<Integer> normalProvider;

public Complicated createComplicated(String assisted, Listener listener) {
ComplicatedImpl impl = new ComplicatedImpl(normalProvider.get(), assisted);

// If ComplicatedImpl uses member injection, inject an Injector and call
// injector.injectMembers(impl) to call @Inject-annotated methods/fields.

impl.addListener(listener);
return impl;
}
}

如果你愿意放addListener关于Complicated接口(interface),您还可以选择编写一个包装器来注入(inject) ComplicatedFactory、创建新实例并调用 addListener立即对他们进行。如果您将 ComplicatedFactory 绑定(bind)在 PrivateModule 中,这会特别有效。然后仅公开您的新 ComplicatedWrapperFactory,使您的 ComplicatedWrapperFactory 成为创建新的 Complicated 实现的唯一方法。

关于java - Guice:辅助注入(inject)和提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26246767/

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