2012-06-16 4 views
0

У меня есть завод, который выглядит следующим образом:Google Guice вложенных помощь впрыскивает

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». Может ли кто-нибудь помочь?

ответ

0

Я создал класс настроек, который держит 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()); 
    } 
} 

Это своего рода работает, но я не уверен, что мне это нравится.

0

Guice устраняет необходимость в фабриках и использовании новых в вашем коде Java.

Ваш код factory, кажется, нарушает этот принцип.

Возможно, вы захотите отремонтировать фасад, чтобы он получал объект client посредством инъекции (с использованием метода setClient).

+0

Завод вводится в фасад. Я отредактирую. – kalithlev

Смежные вопросы