簡體   English   中英

關於應用程序組件的Dagger 2實例化

[英]Dagger 2 instantiation on application component

我對dagger2有疑問,

如果我使用ApplicationComponent提供@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);
    }
}

在上面的例子中,Test將在類Main中由該類中的DaggerComponent實例實例化。

但是在Main2類中,除非在Test類型的屬性上標記顯式的@Inject注釋,否則Test不會被實例化。

另請注意,在上述情況下,如果在Main和Main2類中都需要類Test的單例實例,請使用相同的DaggerComponent實例在兩個類中注入Test對象。 由於您在兩個類中單獨實例化DaggerComponent,因此您將在Main和Main2中獲得類Test的單獨實例。

如果您想知道dagger如何在幕后使用示波器,請閱讀Dagger生成的代碼。 我在介質上寫了一篇關於匕首范圍如何在內部工作的文章。 如果你願意,請按照這個。 Dagger范圍如何在內部工作

它會在某個類中注入時進行實例化。

您可以通過dagger檢查生成的代碼,以獲取DaggerComponent類的inject(main2)方法,它將為空,如下所示:

   @Override
     public void inject(main2 clazz) {}

inject(main)方法將調用注入字段(在創建它的實例之后)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM