使用guice创建类的多个实例
有一个类持有一些状态并实现一个接口。 该类应在具有不同配置的GUICE模块中多次注册。 该类对其他bean有依赖关系,应该由GUICE注入。 例:
public class MenuItemImpl implements MenuItem {
@Inject
AnyService service;
public MenuItemImpl(String caption) {
this.caption = caption;
}
//...
}
而不是使用c'tor参数,公共setter也是可能的。
在Guice模块中,我想绑定MenuItemImpl类的多个实例。
我试图使用Provider<T>
,但是,在这种情况下,依赖bean不会被注入。
Multibinder<MenuItem> binder = Multibinder.newSetBinder(binder(), MenuItem.class);
binder.addBinding().toProvider( new Provider<MenuItem>() {
@Override
public MenuItem get() {
return new MenuItemImpl("StartCaption");
}
}
我看了@Assist标注。 但是,我想在模块的绑定阶段指定配置,而不是在使用bean时指定配置。
我看到的唯一解决方法是为每个配置创建不同的子类,这是不好的样式imho,而不是OO意图是什么。
public class A
{
@Inject
@Named("startCaption")
private MenuItem menuItem;
}
public class B
{
@Inject
@Named("endCaption")
private MenuItem menuItem;
}
和Guice模块
String[] captions = { "startCaption", "endCaption" };
for(final String caption : captions)
{
bind(MenuItem.class).annotatedWith(Names.named(caption)).toProvider(
new Provider<MenuItem>()
{
public MenuItem get()
{
return new MenuItemImpl(caption);
}
});
}
链接地址: http://www.djcxy.com/p/94647.html
上一篇: Create multiple instances of class using guice
下一篇: Running inside Guice injector, @Injects not respected on `new`