Java Google Guice嵌套辅助注入
我有一个工厂,看起来像这样:Java Google Guice嵌套辅助注入,java,dependency-injection,guice,Java,Dependency Injection,Guice,我有一个工厂,看起来像这样: public class Factory { public Client createClient(String url) { UrlBuilder urlBuilder = new UrlBuilder(url); DefaultHttpClient httpClient = new DefaultHttpClient(); HttpProcessor processor = new Compressio
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;
}
}
像这样的课程:
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;
}
}
我如何正确地使用GoogleGuice来做同样的事情?我尝试了辅助注射,但我不确定如何创建“UrlBuilder”。有人能帮忙吗
Guice减轻了对工厂的需求,并在您的应用程序中使用了新技术
Java代码
您的工厂
代码似乎违反了该原则
您可能需要重新设计facade,以便它通过注入(使用setClient)方法接收
客户机对象。我创建了一个保存URL的设置类,并执行了以下操作:
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());
}
}
它有点用,但我不确定我是否喜欢它