【发布时间】:2018-06-12 00:00:26
【问题描述】:
我一直在为一个项目使用 guice。
我有一个有很多实现的抽象类。为了使用正确的实现,我使用了一个接收参数然后返回正确实例的工厂。
演示代码
@Singleton
public class MyFactory {
private final Foo foo;
@Inject
public MyFactory(final Foo foo) {
this.foo = foo;
}
public A create(final Bar bar) {
switch (bar) {
case 0:
return new B(foo, bar);
case 1:
return new C(foo, bar);
//this goes on
}
}
}
public abstract A {
public A(final Bar bar) {
//do sth
}
}
public B extends A {
private final Foo foo;
public B(final Foo foo, final Bar bar) {
super(bar);
this.foo = foo;
}
}
public C extends A {
private final Foo foo;
public C(final Foo foo, final Bar bar) {
super(bar);
this.foo = foo;
}
}
我想知道的是,如果我可以用Guice替换工厂直接注入A的实现(注意他们应该使用辅助注入)?
谢谢。
【问题讨论】: