2013-02-25 2 views
1

Метод Spring lookup позволяет вам иметь метод, который возвращает новый экземпляр объекта каждый раз, когда вы его вызываете. Я прочитал руководство пользователя Guice и не видел очевидного способа сделать это. Я хотел был бы иметь такой код как:Что такое эквивалент Guice методу поиска Spring?

@Inject 
private FooInstanceFactory fooInstanceFactory; 

//... 
    Foo foo = fooInstanceFactory.getNewInstanceOfFoo(); 
//... 

ответ

2

Это действительно не Guice способ делать вещи. Вы можете указать inject a Provider<Foo> и позвонить по телефону Provider#get(), но код , вызывающий, не должен касаться того, собираете ли вы новый экземпляр каждый раз. Это касается конфигурации модуля, о которой нужно беспокоиться.

+0

Я (возможно, неправильно) считаю Guice как способ удаления ключевого слова 'new' из моей производственной логики. Если у меня есть производственная логика, которая генерирует сообщение JSON и имеет много новых JSONObject() в ней, я должен быть уверен, что каждый созданный JSONObject - это новый экземпляр, а не один. Как я думаю об этом неправильно? –

+1

Место, где каждый JSONObject является новым, находится в логике провайдера, а не в логике потребителя. –

+0

@LouisWasserman Не уверен, правильно ли я интерпретировал ваше утверждение. Если 'SpecificJSONMessageConstructor' нуждается в создании глубоко вложенного сообщения JSON, не нужно ли' SpecificJSONMessageConstructor' знать, что каждый новый объект JSON, который он создает, является другим экземпляром из предыдущего? Я не понимаю, как я могу написать свой код таким образом, чтобы это не имело значения. Но если вы просто * говорите «Поставщик ' должен 'возвращать новый JSONObject()', а не 'SpecificJSONMessageConstructor', то я думаю, что мы на одной странице. –