java - 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 创建并添加到对象图中后立即从对象图中注入?如果它们不同,为什么会这样?谢谢!
解决方案
构造函数注入使您可以更好地控制对象实例化,因为使用字段注入意味着将您的类创建限制为反射并依赖对这些特定注入注释的支持。除此之外,明确地依赖于构造函数让代码更容易维护和测试。
据我所知,它在匕首图上的保存方式没有区别,但构造函数调用总是比注入字段快。
在我看来,只有当我们无法控制对象的创建时,我们才应该使用属性,例如Activities
和Fragments
,例如。
推荐阅读
- python - AttributeError:模块 'socket' 没有属性 'MSG_DONTWAIT'
- java - 如何从 Java 独立应用程序在前台打开 Windows 应用程序
- c# - 为什么 SharePoint 客户端对象模型在查询失败时检索所有项目?
- linux - 是否需要链接所有依赖项?
- log4net - 将 Log4Net 设置为每天仅创建 4 个文件
- c# - 将字符串从 c# 传递到 c dll 时的错误行为
- regex - 正则表达式:如果模式以 / 开头,则不匹配
- javascript - 仅删除反应原生平面列表上的第一个和最后一个分隔符
- c# - 正确地将 C++ long 转换为 C# int
- javascript - 将网址/路径插入谷歌地图标记,Laravel