Java 应用程序组件上的Dagger 2实例化
我有个关于dagger2的问题 如果我为ApplicationComponent提供了Java 应用程序组件上的Dagger 2实例化,java,android,dagger,Java,Android,Dagger,我有个关于dagger2的问题 如果我为ApplicationComponent提供了@Singleton,但没有在某个类中使用@Inject实例化对象。当对象在某个类中被@Inject时,它是被实例化还是将被实例化? 例如,在下面的代码中,测试是否在main2上实例化 @Singleton public class Test { @Inject public Test() { } } public class main() { @Inject Test t
@Singleton
,但没有在某个类中使用@Inject
实例化对象。当对象在某个类中被@Inject
时,它是被实例化还是将被实例化?
例如,在下面的代码中,测试是否在main2上实例化
@Singleton
public class Test {
@Inject
public Test() {
}
}
public class main() {
@Inject Test test;
public void start() {
DaggerComponent.create().inject(this);
}
}
public class main2() {
public void start() {
DaggerComponent.create().inject(this);
}
}
当它被注入到某个类中时,它将被实例化 您可以检查dagger为
DaggerComponent
类的inject(main2)
方法生成的代码,它将是空的,如下所示:
@Override
public void inject(main2 clazz) {}
而
inject(main)
方法将调用注入字段(在创建字段实例之后)。在上述情况下,测试将由该类中DaggerComponent的实例在类main中实例化
但在类Main2中,除非在类型Test的属性上标记了显式@Inject注释,否则不会实例化Test
另外,请注意,在上述情况下,如果在类Main和Main2中都需要类Test的单例实例,请使用相同的DaggerComponent实例在这两个类中注入测试对象。当您在两个类中分别实例化DaggerComponent时,您将在Main和Main2中获得单独的类测试实例
如果您想知道dagger如何在幕后使用作用域,请阅读dagger生成的代码。我在媒体上写了一篇关于匕首示波器内部工作原理的文章。如果你想的话,遵循这个 你必须