Java Dagger中字段和构造函数注入的区别
嗨,我有一个非常简单的关于android的匕首问题Java Dagger中字段和构造函数注入的区别,java,android,dagger,Java,Android,Dagger,嗨,我有一个非常简单的关于android的匕首问题 class Fooz { @Inject Foo1 mFoo1; public Fooz() { .... } } class Fooz { private Foo1 mFoo1; @Inject public Fooz(Foo1 foo1) { mFoo1 = foo1; } } 这两个类如何相同? 第一个直接注入Foo1字段,而第二个在构造函数中分配mFo
class Fooz {
@Inject Foo1 mFoo1;
public Fooz() {
....
}
}
class Fooz {
private Foo1 mFoo1;
@Inject public Fooz(Foo1 foo1) {
mFoo1 = foo1;
}
}
这两个类如何相同?
第一个直接注入Foo1字段,而第二个在构造函数中分配mFoo1。
对于第二个问题,Foo1是否在Fooz创建并添加到对象图时就从对象图中注入?
如果它们不同,为什么呢?
谢谢 当使用依赖项注入注入Fooz时,这些类的行为将相同。但是,当使用您定义的构造函数进行构造时,它们的行为会有所不同 例1。调用new Fooz()将导致mFoo1为null 例2。调用新的Fooz(foo1)将导致mFoo1被初始化为foo1 首选的(个人意见)方法是在构造函数上使用依赖项注入注释,因为这将避免空指针异常,如比较示例1和示例2时所述。更重要的是,这种构造函数在测试类时提供了更大的灵活性,因为您可以更轻松地提供模拟
这是一条描述更好的sonarqube规则,解释了我提到的内容。构造函数注入为您提供了对对象实例化的更多控制,因为使用字段注入意味着将您的类创建限制为反射,并依赖于对这些特定注入注释的支持。除此之外,明确依赖于构造函数可以使代码更易于维护和测试 据我所知,它在匕首图上的保存方式没有区别,但构造函数调用总是比注入的字段快 在我看来,我们应该仅在无法控制对象创建时使用属性,例如在
活动
和片段
,每个示例。可能重复的