Как получить всех реализаторов / подклассов интерфейса с помощью Guice?

С помощью Spring вы можете определить свойство массива и заставить Spring вводить по одному из каждого (@Component) класса, производного от данного типа.

Есть ли эквивалент для этого в Guice? Или точка расширения для добавления этого поведения?

18
задан skaffman 24 May 2011 в 19:59
поделиться

1 ответ

Это похоже на пример использования Guice MultiBinder . У вас может быть что-то вроде этого:

interface YourInterface {
    ...
}

class A implements YourInterface {
    ...
}

class B implements YourInterface {
    ...
}

class YourModule extends AbstractModule {
    @Override protected void configure() {
        Multibinder.newSetBinder(YourInterface.class).addBinding().to(A.class):
        Multibinder.newSetBinder(YourInterface.class).addBinding().to(B.class):
    }
}

И вы можете ввести Set<YourInterface> где угодно:

class SomeClass {
    @Inject public SomeClass(Set<YourInterface> allImplementations) {
        ...
    }
}

Это должно соответствовать тому, что вам нужно.

18
ответ дан 30 November 2019 в 08:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: