当前位置: 首页 > 知识库问答 >
问题:

Google Guice嵌套辅助注入

穆宏胜
2023-03-14

我有一个工厂是这样的:

public class Factory {

    public Client createClient(String url) {
        UrlBuilder urlBuilder = new UrlBuilder(url);

        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpProcessor processor = new CompressionHttpProcessor();
        httpClient.addRequestInterceptor(processor);
        httpClient.addResponseInterceptor(processor);

        return new Client(httpClient, urlBuilder);
    }
}

这样的类:

public class Facade {

    private Factory factory;
    private String url;

    public Facade(Factory factory) {
        this.factory = factory;
    }

    public void doStuff() {
        Client client = factory.createClient(url);
        // do stuff with client
    }

    public void setUrl(String url) {
        this.url = url;
    }
}

如何正确使用Google Guice来做同样的事情?我尝试了辅助注射,但我不确定如何创建“UrlBuilder”。谁能帮忙?

共有2个答案

危寒
2023-03-14

我创建了一个保存URL的Setting类,并执行了以下操作:

public MyModule extends AbstractModule {
    private final Settings settings;
    public MyModule(Settings settings) {
        this.settings = settings;
    }

    // configure

    @Provides
    private UrlBuilder createUrlBuilder(Settings settings) {
        return new UrlBuilder(settings.getUrl());
    }
}

它有点工作,但我不确定我喜欢它。

慕容烨
2023-03-14

Guice减轻了对工厂和在Java代码中使用新代码的需求。

您的工厂代码似乎违反了这一原则。

您可能希望重新设计外观,以便它通过注入(使用 setClient)方法接收客户端对象。

 类似资料:
  • 我正在使用Guice Assisted Inject库为我建立一个工厂。我目前的设置如下: 这迫使我使用< code > factory . create controller(first,factory . create second(first))显式创建一个< code>SecondDep。是否可以更改我的绑定,这样我就可以简单地执行< code > factory . create con

  • 我是Guice的新手,所以我试图理解AssistedInject。我有一个非常简单的项目: 我要注入的类: 带辅助注射的类别: 工厂 主类: 但它仍然不起作用,我不明白,我错在哪里?

  • 我已经使用google-guice和辅助注射机制有一段时间了。因为我在scala,刚刚发现scala-guice,我也对使用它感兴趣。但是我对如何使用辅助注射感到困惑。没有使用辅助注射的例子。 因此,我的问题是:是否可以使用scala guice辅助注射,如果可以,请提供一个简单的例子? 此外,对于google-guice,我使用以下库:javax.inject.jar、guice-3.0.jar

  • 我一直在用guice做一个项目。 我有一个抽象类,它有很多实现。为了使用正确的实现,我使用一个工厂,它接收参数,然后返回正确的实例。 演示代码 我想知道的是,如果我可以用替换工厂,直接注入的实现(请注意,它们应该使用辅助注入)? 谢谢你。

  • 目前,我将辅助注射与命名参数一起使用,如下所示: 这很棒。但是我认为使用字符串作为参数的标识符有点难看。我想做的是以下内容: 所以本质上我想要自定义辅助注释。有办法做到这一点吗?

  • 我对摩基托并不陌生,但这次我在工作中发现了一个有趣的案例。我希望你能帮我解决这件事。 我需要注入mock来改变测试过程中的某些方法行为。问题是,bean结构是嵌套的,并且这个bean在其他bean内部,不能从test方法访问。我的代码如下所示: 所以在我的测试中,我希望调用nestedDAO.method返回模拟答案。 我尝试执行一个initmocks: 还要在我的测试类上添加注释: 总是从方法获