Dependency injection 当存在两个不同的构造函数时,如何使用Guice注入?
Total Guice noob在这里,已经阅读了一些文章并观看了介绍视频,仅此而已 这是我的简化旧代码,我正在尝试“guicifiy”。我不太明白怎么做,因为(据我所知),我只能Dependency injection 当存在两个不同的构造函数时,如何使用Guice注入?,dependency-injection,guice,Dependency Injection,Guice,Total Guice noob在这里,已经阅读了一些文章并观看了介绍视频,仅此而已 这是我的简化旧代码,我正在尝试“guicifiy”。我不太明白怎么做,因为(据我所知),我只能@inject-注释两个构造函数中的一个?调用类如何创建一个或另一个实例?还是我必须以某种方式重构它 public class MyDialog extends JDialog { public MyDialog( JFrame parent, <other parameters...> ) {
@inject
-注释两个构造函数中的一个?调用类如何创建一个或另一个实例?还是我必须以某种方式重构它
public class MyDialog extends JDialog {
public MyDialog( JFrame parent, <other parameters...> ) {
super( parent );
}
public MyDialog( JDialog parent, <other parameters...>) {
super( parent );
}
}
公共类MyDialog扩展JDialog{
公共MyDialog(JFrame父对象,){
超级(家长);
}
公共MyDialog(JDialog父级){
超级(家长);
}
}
您只能注入一个ctor
根据此类的使用方式,您可以:
- 使用两个“新”方法将工厂注入到客户机代码中李>
- 将所有参数滚动到一个ctor中,并在不需要时传递null
这表明调用类需要MyDialog的多个实例?然后,您需要使用手动轧制工厂(如果您只有一个ctor,辅助注射可以为您处理此问题)。我不知道你在做什么的细节,我可能会重复你已经知道的,但作为一个空白声明,我建议也从MyDialog中提取一个接口,让工厂返回它们。通过这种方式,您可以在测试中伪造MyDialog。构造函数注入非常干净。mlk是正确的,它说您只能注入一个构造函数 您可以使用方法注入:
public class Smt {
private int a;
private Cereal cereal;
private Personality personality;
private ignition;
public Smt() {
this.a = 5;
}
public Smt(int a) {
this.a = a;
}
@Inject
public void setup(@CiniMini Cereal cereal, @Rastafarian Personality personality,
Ignition ignition) {
this.cereal = cereal;
this.personality = personality;
this.ignition = ignition;
}
}
Guice将要做的是调用类“
setup
class方法并提供所有注入。然后执行与构造函数中相同的操作——将对象分配给类的属性。我同意前面的评论。
还有一个提示:构造函数注入应该提供类所需的所有依赖项。正如mlk所说,一种方法可以是使用大多数参数对构造函数进行注释,然后重构另一种方法,通过在需要时传递null值来调用前者。此外,Guice 3.0支持所谓的构造函数绑定,允许程序员指定要使用的构造函数。有关详细信息,请参阅。