Google Guice通过注释和/或包进行绑定

时间:2015-05-09 08:41:44

标签: java dependency-injection guice

我在一个包中有3个豆子,我想成为热切的单身人士。

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或按包名扫描的东西。

1 个答案:

答案 0 :(得分:4)

我会做这样的事情:

@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所依赖的Guava图书馆。如果您正在使用Guice 3,则可能需要添加此依赖项。

可能还有第三方库包含@EagerSingleton注释,FWIW。