首页 > 解决方案 > Dagger 中的字段注入和构造函数注入的区别

问题描述

嗨,我有一个非常简单的关于 android 的匕首问题。

class Fooz {
    @Inject Foo1 mFoo1;
    public Fooz() {
        ....
    }
}

class Fooz {
    private Foo1 mFoo1;

    @Inject public Fooz(Foo1 foo1) {
        mFoo1 = foo1;
    }
}

这两个类如何相同?第一个直接注入 Foo1 字段,而第二个在构造函数中分配 mFoo1 。对于第二个,Foo1 是否会在 Fooz 创建并添加到对象图中后立即从对象图中注入?如果它们不同,为什么会这样?谢谢!

标签: javaandroiddagger

解决方案


构造函数注入使您可以更好地控制对象实例化,因为使用字段注入意味着将您的类创建限制为反射并依赖对这些特定注入注释的支持。除此之外,明确地依赖于构造函数让代码更容易维护和测试。

据我所知,它在匕首图上的保存方式没有区别,但构造函数调用总是比注入字段快。

在我看来,只有当我们无法控制对象的创建时,我们才应该使用属性,例如ActivitiesFragments,例如。


推荐阅读