當前位置:編程學習大全網 - 腳本源碼 - 02.對註解的分類講解——Inject部分

02.對註解的分類講解——Inject部分

本文將通過對註解的分類講解來交代Dagger2的進階用法。

關於Dagger的註解,簡單將它們分成三類:

來對應Dagger完成依賴註入的三部分內容,首先先從Inject註入部分看起。

@Inject用於註解構造函數或成員變量。

作用於成員變量時:

Dagger2根據該註解及成員變量的類型,從Moudle中得到相應實例,或者根據使用了@Inject標註的無參構造函數的類,獲取該類的實例。

註意:成員變量的訪問修飾符不能是private

作用於構造函數時:

壹般為無參數的壹般構造函數,可以直接在其它類中通過依賴註入的方式進行註入。

@Inject 不適用的情況:

(使用@Provides可以處理這些問題)

我們可以通過@Inject註解來註入實例,但是在註入過程中會出現比如相同的類確卻是不同的實例,這時候應該怎麽辦呢?

Dagger2提供了@Named註解用於在區別不同的實例對象創建。

使用@Named註解來定義兩個不同實例:

定義Component:

在Activity 中調用兩個不同對象:

測試結果:

可以看到我們所引入的兩個對象確實是兩個不同的對象。

@Qualifier註解是用來區分同壹緯度下兩種不同的創建實例的方法,什麽叫同壹緯度呢?

比如我們在Module提供兩種不同的創建實例的方法,但是創建的實例又是同壹個,這時候應該怎麽操作呢?可以通過@Qualifier註解創建兩個不同的註解來實現:

這兩個povider方法中所提供的對象都是Food只是其中的創建方式不同,這種情況下Dagger是不知道應該創建哪壹個對象的。

所以我們將通過@Qualifier創建兩個新的註解:

然後修改壹下我們提供依賴註入的方法:

在Activity中獲取對象:

打印壹下結果:

細心的大家會發現其實@Qualifier註解和@Named註解很相像,@Named的內部實現就是通過@Qualifier註解,所以壹般的我們通過@Named註解就可以實現上述操作啦,了解@Qualifier的目的是為了在自定義註解的時候使用。

來看壹下@Named的源碼:

這下是不是理清楚它們之間的關系啦,接下來在講解Component部分之前先來溫故壹下常用的那些Module部分的部分註解吧。

  • 上一篇:amd的推土機與打樁機有什麽區別?
  • 下一篇:電腦上怎麽下載pdf文檔 下載方法介紹
  • copyright 2024編程學習大全網