2015-05-09 55 views
3

我在一个包中有3个bean,我想成为单身人士。Google Guice通过注释和/或包裹绑定

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(); 
    } 
} 

如何配置他们不使用谷歌吉斯确切的写作课名都急于单身?

我正在寻找一些东西,如通过一些自定义注释标记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从番石榴库,吉斯4取决于未来。如果你使用的是Guice 3,你可能需要添加这个依赖。

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

+0

谢谢,我有想法。如果没有这样的第三方库,手动实现它很容易。 –