2009-02-16 2 views
4

Я использовал весну раньше (и вроде бы), но думал, что посмотрю Guice.Может ли Guice инициализировать бобы?

Есть ли способ инициализировать что-то вроде карт или списков в beans с использованием Guice?

Например, я сделал следующее, прежде чем весной, чтобы ввести список элементов, которые я хочу обработать в некоторых компонентах.

<property name="FilesToProcess"> 
    <list> 
     <value>file1.xml</value> 
     <value>file2.xml</value> 
    </list> 
</property> 

Как это сделать в Guice?

ответ

6

В Guice2 есть MultiBindings и MapBindings, которые должны работать на вас.

https://github.com/google/guice/wiki/Multibindings

Обновлено:

После снова глядя на это, кажется, что вы можете спросить, как вы можете вводить значения во время выполнения в Guice, возможно, как произвольные объекты.

Guice очень сфокусирован на том, чтобы делать все как код типа, поэтому он не поддается естественно этому. То, что я сделал, чтобы представить вклад в Guice, - это создать схему XML и использовать jaxb, чтобы сосать это и вставить результирующие объекты.

Существует метод Names.bindProperties для привязки регулярных старых свойств к константам Guice .

Существует также некоторый уровень интеграции с весной, поэтому вы можете посмотреть на это как на .

+0

Спасибо! Ваше обновление точно ответило на мой вопрос. – Vinnie

+0

эта ссылка мертва, может ли кто-нибудь предоставить новую ссылку на соответствующую информацию, содержащую ссылку? –

2

Guice позволяет вводить литералы типа. Синтаксис немного странный. Существует blog entry, который объясняет, почему.

Связывание будет выглядеть примерно так:

public class SampleModule extends AbstractModule { 
    protected void configure() { 
     bind(new TypeLiteral<List<String>>() {}). 
       annotatedWith(Names.named("FilesToProcess")). 
       toInstance(Arrays.asList("file1.xml", "file2.xml")); 
    } 
} 

И тогда ваш код приложения может впрыснуть список по имени, как это:

public class SampleClass { 
    private final List<String> files; 

    @Inject 
    public SampleClass(@Named("FilesToProcess") List<String> files) { 
     this.files = files; 
    } 
} 
1

Я согласен с Дэйвом Stenglein для значений времени выполнения.

Есть такие рамки, как Obix, которые специализируются на конфигурации. Мне нравится Guice для код впрыска, но они лучше для этого конфигурация впрыска.

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