2015-05-09 2 views
3

У меня есть 3 фасоли в одном пакете, которые я хотел бы быть нетерпеливыми синглонами.Google Guice bind by аннотации и/или пакета

public class Module1 implements Module { 
    @Override 
    public void configure(Binder binder) { 
     binder.bind(Bean1.class).asEagerSingleton(); 
     binder.bind(Bean2.class).asEagerSingleton(); 
     binder.bind(Bean3.class).asEagerSingleton(); 
    } 
} 

Как я могу сконфигурировать их как сильные одиночные игры без точного названия класса, используя Google Guice?

Я ищу что-то вроде маркировки Bean1, Bean2, Bean3 с помощью специальной аннотации или сканирования по имени пакета.

+0

Не уверен, что вы имеете в виду. Как бы вы хотели сослаться на них «без написания точного имени класса»? –

+0

Я хотел бы отметить их как-то, например, добавить некоторые пользовательские аннотации или поиск по имени пакета, что одинаково для всех из них. –

ответ

3

Я хотел бы сделать что-то вроде этого:

@Override 
protected void configure() { 
    try { 
    for (ClassInfo classInfo: 
      ClassPath.from(getClass().getClassLoader()).getTopLevelClasses("my.package.name")) { 
     bind(classInfo.load()).asEagerSingleton(); 
    } 
    } catch (IOException e) { // Do something 
    } 
} 

ClassPath приходит из библиотеки Гуава которая Guice 4 зависит. Если вы используете Guice 3, вам, вероятно, придется добавить эту зависимость.

Также могут быть сторонние библиотеки, содержащие аннотацию @EagerSingleton, FWIW.

+0

спасибо, у меня есть идея. Если такой сторонней библиотеки нет, ее легко реализовать вручную. –

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