Dagger2 進一步解讀

2021-07-31 21:24:47 字數 2823 閱讀 6212

一.在我們程式設計中可能回出現下面的情況

有乙個類會在多個類中用到,這時我們想依賴注入,就會出現乙個module物件注入到多個呼叫者中的情況

這時候我們應該怎麼做呢?

在這裡我要說明一下module 和橋梁

component

是成對存在的

1.定義乙個頂級的module

這個module 提供了

context

@module

public

class}

現在我們有兩個或以上的呼叫者用到context 物件

所以我們就要定義下層的多個module,獲取到context

2.

所以我們要將頂級module 的context 提供出去

// 向其下層提供context 物件 context procontext();}

3.下層module獲得 context

// 下層module類@modulepublic class activitymoudule }

4.下層module 的橋梁提供給呼叫者

5.呼叫者被注入

二.@qualifier 自定義標記

在使用中,會出現兩個方法返回物件相同時的情況,那麼如何區分呢。

@qualifier

我的理解就是,當要注入的物件的型別不能確定是唯一的,這時就要自定義註解用來標記注入的具體是那個類

舉個栗子:

bean類person 中有兩個構造器 通過傳入不同的引數來例項化物件

public class person public person(string name)}

這種情況注入依賴:

第一種方式:這種方式和qualifier無關

activitymodule

中新增@named標記

@module

public

class

activitymoudule

@named

("name"

) // 通過name建立person 物件

@provides

person providepersonname()}

使用時,也需要新增此標記

public

class

mainactivity

extends }

使用時,使用者的

@inject

上,必須要加入註解

@named("***")

,不然編譯期會報錯。

這樣使用過程中,雖然解決了問題,但是通過字串標記乙個物件,容易導致前後不匹配,

第二種方式:自定義註解(

@qualifier)

自定義兩個註解,分別對應

context

和name。

@qualifier

@retention

(retentionpolicy.runtime)

// 執行時仍可用

public

@

inte***ce

personforcontext

@qualifier

@retention

(retentionpolicy.runtime)

public

@

inte***ce

personforname

在使用@named("")

的地方替換為自定義的註解

@personforcontext

// 通過context建立person 物件

@provides

person providepersoncontext(context context)

@personforname

// 通過name建立person 物件

@provides

person providepersonname()

注入時:

@personforcontext

// 標記

@inject

person person;

@personforname

// 標記

@inject

person person2;

bufferedReader進一步理解

public static void main string args string mystring system.out.println 請輸入明文 bufferedreader buf new bufferedreader new inputstreamreader system.in try...

Looper Handler進一步學習

package com.test.looper import android.os.bundle import android.os.handler import android.os.handlerthread import android.os.looper import android.os....

進一步了解Makefile

mkdir p add src 一層一層建立目錄。touch add makefile 建立 makefile include 目錄中存放標頭檔案。scripts 存放指令碼檔案。存放方式 按照核心管理原始碼來管理。為什麼學習makefile?編譯大型專案 讀懂別人的開源 找到程式入口 看專案的順序...