Java 用GoogleGuice插入列表的最佳方式是什么?
我有三个类Java 用GoogleGuice插入列表的最佳方式是什么?,java,dependency-injection,guice,Java,Dependency Injection,Guice,我有三个类CircleBuilder,SquareBuilder,和TriangleBuilder实现ShapeBuilder接口 我需要初始化我的FormBuilder,尤其是BuilderList(扩展列表),每个类使用一个GoogleGuice实例 最好的方法是什么 我知道提供者的方法和类似的东西: @Provides FormBuilder provideFormBuilder() { DatabaseTransactionLog instance = new FormBuild
CircleBuilder
,SquareBuilder
,和TriangleBuilder
实现ShapeBuilder
接口
我需要初始化我的FormBuilder
,尤其是BuilderList
(扩展列表
),每个类使用一个GoogleGuice实例
最好的方法是什么
我知道提供者的方法和类似的东西:
@Provides
FormBuilder provideFormBuilder() {
DatabaseTransactionLog instance = new FormBuilder ( <numerous parameters> );
ShapeBuilder builder = null ;
builder = new CircleBuilder( <numerous parameters> ) ;
instance.addBuilder( builder ) ;
builder = new SquareBuilder( <numerous parameters> ) ;
instance.addBuilder( builder ) ;
// And so on
return instance;
}
有什么想法吗?考虑一下,它将收集与您的代码片段非常相似的绑定。没有通过Multibinder提供列表,因为Multibinder是为绑定到多个模块中的同一集合而设计的,并且Multibinder列表的元素顺序将取决于模块的评估顺序
Multibinder<ShapeBuilder> shapeBinder =
Multibinder.newSetBinder(binder(), ShapeBuilder.class);
shapeBinder.addBinding().to(CircleBuilder.class);
shapeBinder.addBinding().to(TriangleBuilder.class);
shapeBinder.addBinding().to(SquareBuilder.class);
// Now you can inject Set<ShapeBuilder>.
我们可以这样做:-
@Override
protected void configure() {
bind(ShapeBuilder.class).annotatedWith(Names.named("Circle")).to(CircleBuilder.class);
bind(ShapeBuilder.class).annotatedWith(Names.named("Triangle")).to(TriangleBuilder.class);
bind(ShapeBuilder.class).annotatedWith(Names.named("Square")).to(SquareBuilder.class);
}
在FormBuilder类中:-
class FormBuilder{
List<ShapeBuilder> shapeBuilderList;
@Inject
public FormBuilder(@Named("Circle")ShapeBuilder circle, @Named("Triangle")ShapeBuilder triangle,@Named("Square")ShapeBuilder square){
shapeBuilderList = new ArrayList<>();
//add all of them
shapeBuilderList.add(circle);
}
}
类表单生成器{
列表shapeBuilderList;
@注入
公共表单生成器(@Named(“Circle”)ShapeBuilder Circle、@Named(“Triangle”)ShapeBuilder Triangle、@Named(“Square”)ShapeBuilder Square){
shapeBuilderList=新的ArrayList();
//把它们全部加起来
shapeBuilderList.add(圆形);
}
}
Note:multibinding需要另一个jar->guice-multibindings-3.0。jar我的问题(这里包括sofURL)显示了如何使用Mulitbinder,然后构造函数将“一组”具体注入到需要它们的类中(对于那些倾向于基于构造函数的注入的类)。这是多绑定用户指南的当前链接:@UzielSulkies六年过得真快!我已经更新了两个链接。谢谢你的邀请!
@Override
protected void configure() {
bind(ShapeBuilder.class).annotatedWith(Names.named("Circle")).to(CircleBuilder.class);
bind(ShapeBuilder.class).annotatedWith(Names.named("Triangle")).to(TriangleBuilder.class);
bind(ShapeBuilder.class).annotatedWith(Names.named("Square")).to(SquareBuilder.class);
}
class FormBuilder{
List<ShapeBuilder> shapeBuilderList;
@Inject
public FormBuilder(@Named("Circle")ShapeBuilder circle, @Named("Triangle")ShapeBuilder triangle,@Named("Square")ShapeBuilder square){
shapeBuilderList = new ArrayList<>();
//add all of them
shapeBuilderList.add(circle);
}
}