Может ли Guice инициализировать бобы? - PullRequest
4 голосов
/ 16 февраля 2009

Я использовал Spring раньше (и мне это нравится), но подумал, что взгляну на Guice .

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

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

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

Как я могу сделать это в Guice?

Ответы [ 3 ]

6 голосов
/ 16 февраля 2009

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

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

Обновлен:

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

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

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

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

2 голосов
/ 16 февраля 2009

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

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

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 голос
/ 18 февраля 2009

Я согласен с Дейвом Стенглейном в отношении значений времени выполнения.

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

...