Dagger 2

A fast dependency injector for Android and Java.

Dagger 2 - User's Guide
GitHub - Dagger 2

公共技術(shù)點(diǎn)之依賴注入
Dagger 源碼解析

git clone https://github.com/google/dagger.git

cd dagger

//構(gòu)建項(xiàng)目,需要指定Android sdk目錄
mvn package -Dandroid.sdk.path=/Users/shenyunlong/Library/Android/sdk/

// 運(yùn)行coffee example demo
// 運(yùn)行時(shí)依賴javax.inject-1.jar和dagger-2.5-SNAPSHOT.jar
java -cp examples/simple/target/simple-2.5-SNAPSHOT.jar:examples/simple/target/javax.inject-1.jar:core/target/dagger-2.5-SNAPSHOT.jar coffee.CoffeeApp

關(guān)于Maven

Maven 是一個(gè)項(xiàng)目管理和構(gòu)建自動(dòng)化工具。

一個(gè) maven 項(xiàng)目在默認(rèn)情況下會(huì)產(chǎn)生 JAR 文件,另外 傅瞻,編譯后 的 classes 會(huì)放在 ${basedir}/target/classes 下面呢撞, JAR 文件會(huì)放在 ${basedir}/target 下面灶搜。

// Mac上通過(guò)brew安裝maven
brew install maven
// 檢查是否安裝成功
mvn -v
...
// 構(gòu)建maven項(xiàng)目
mvn package
// 運(yùn)行
java -cp target/helloworld-1.0-SNAPSHOT.jar com.mycompany.helloworld.App

當(dāng)你第一次運(yùn)行 maven 的時(shí)候硫麻,它會(huì)從網(wǎng)上的 maven 庫(kù) (repository) 下載需要的程序,存放在你電腦的本地庫(kù) (local repository) 中咏花,所以這個(gè)時(shí)候你需要有 Internet 連接。Maven 默認(rèn)的本地庫(kù)是 ~/.m2/repository/ 阀趴,在 Windows 下是 %USER_HOME%.m2\repository\ 昏翰。

  1. POM (Project Object Model)
    一個(gè)項(xiàng)目所有的配置都放置在 POM 文件中:定義項(xiàng)目的類型、名字刘急,管理依賴關(guān)系棚菊,定制插件的行為等等。
    在 POM 中叔汁,groupId, artifactId, packaging, version 叫作 maven 坐標(biāo)窍株,它能唯一的確定一個(gè)項(xiàng)目。有了 maven 坐標(biāo)攻柠,我們就可以用它來(lái)指定我們的項(xiàng)目所依賴的其他項(xiàng)目球订,插件,或者父項(xiàng)目瑰钮。一般 maven 坐標(biāo)寫成如下的格式:

groupId:artifactId:packaging:version

像我們的例子就會(huì)寫成:

com.mycompany.helloworld: helloworld: jar: 1.0-SNAPSHOT

  1. Maven 插件
    pluginId:goalId
    mvn 本身不會(huì)做太多的事情冒滩,它不知道怎么樣編譯或者怎么樣打包。它把構(gòu)建的任務(wù)交給插件去做浪谴。插件定義了常用的構(gòu)建邏輯开睡,能夠被重復(fù)利用。

  2. Maven 生命周期
    mvn package這里的 package 是一個(gè)maven的生命周期階段 (lifecycle phase )苟耻。生命周期指項(xiàng)目的構(gòu)建過(guò)程篇恒,它包含了一系列的有序的階段 (phase),而一個(gè)階段就是構(gòu)建過(guò)程中的一個(gè)步驟凶杖。
    maven 能支持不同的生命周期胁艰,但是最常用的是默認(rèn)的Maven生命周期 (default Maven lifecycle )。如果你沒(méi)有對(duì)它進(jìn)行任何的插件配置或者定制的話,那么上面的命令 mvn package 會(huì)依次執(zhí)行默認(rèn)生命周期中直到包括 package 階段前的所有階段的插件目標(biāo):

process-resources 階段:resources:resources
compile 階段:compiler:compile
process-classes 階段:(默認(rèn)無(wú)目標(biāo))
process-test-resources 階段:resources:testResources
test-compile 階段:compiler:testCompile
test 階段:surefire:test
prepare-package 階段:(默認(rèn)無(wú)目標(biāo))
package 階段:jar:jar

  1. Maven 依賴管理
    在 POM 的 dependencies 部分中腾么,scope 決定了依賴關(guān)系的適用范圍奈梳。我們的例子中 junit 的 scope 是 test,那么它只會(huì)在執(zhí)行 compiler:testCompile and surefire:test 目標(biāo)的時(shí)候才會(huì)被加到 classpath 中解虱,在執(zhí)行 compiler:compile 目標(biāo)時(shí)是拿不到 junit 的攘须。
    我們還可以指定 scope 為 provided,意思是 JDK 或者容器會(huì)提供所需的jar文件殴泰。比如說(shuō)在做web應(yīng)用開發(fā)的時(shí)候于宙,我們?cè)诰幾g的時(shí)候需要 servlet API jar 文件,但是在打包的時(shí)候不需要把這個(gè) jar 文件打在 WAR 中悍汛,因?yàn)閟ervlet容器或者應(yīng)用服務(wù)器會(huì)提供的限煞。
    scope 的默認(rèn)值是 compile,即任何時(shí)候都會(huì)被包含在 classpath 中员凝,在打包的時(shí)候也會(huì)被包括進(jìn)去署驻。

  2. Maven庫(kù)
    當(dāng)?shù)谝淮芜\(yùn)行 maven 命令的時(shí)候,你需要 Internet 連接健霹,因?yàn)樗獜木W(wǎng)上下載一些文件旺上。那么它從哪里下載呢?它是從 maven 默認(rèn)的遠(yuǎn)程庫(kù)(http://repo1.maven.org/maven2) 下載的糖埋。這個(gè)遠(yuǎn)程庫(kù)有 maven 的核心插件和可供下載的 jar 文件宣吱。
    本地庫(kù)是指 maven 下載了插件或者 jar 文件后存放在本地機(jī)器上的拷貝。在 Linux 上瞳别,它的位置在 ~/.m2/repository征候,在 Windows XP 上,在 C:\Documents and Settings\username\.m2\repository 祟敛,在 Windows 7 上疤坝,在 C:\Users\username\.m2\repository。當(dāng) maven 查找需要的 jar 文件時(shí)馆铁,它會(huì)先在本地庫(kù)中尋找跑揉,只有在找不到的情況下,才會(huì)去遠(yuǎn)程庫(kù)中找埠巨。
    運(yùn)行下面的命令能把我們的 helloworld 項(xiàng)目安裝到本地庫(kù):

mvn install
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末历谍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辣垒,更是在濱河造成了極大的恐慌望侈,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勋桶,死亡現(xiàn)場(chǎng)離奇詭異脱衙,居然都是意外死亡侥猬,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門岂丘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)陵究,“玉大人眠饮,你說(shuō)我怎么就攤上這事奥帘。” “怎么了仪召?”我有些...
    開封第一講書人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵寨蹋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我扔茅,道長(zhǎng)已旧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任召娜,我火速辦了婚禮运褪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘玖瘸。我一直安慰自己秸讹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開白布雅倒。 她就那樣靜靜地躺著璃诀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蔑匣。 梳的紋絲不亂的頭發(fā)上劣欢,一...
    開封第一講書人閱讀 52,821評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音裁良,去河邊找鬼凿将。 笑死,一個(gè)胖子當(dāng)著我的面吹牛价脾,可吹牛的內(nèi)容都是我干的丸相。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼彼棍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼灭忠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起座硕,我...
    開封第一講書人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弛作,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后华匾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體映琳,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡机隙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萨西。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片有鹿。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谎脯,靈堂內(nèi)的尸體忽然破棺而出葱跋,到底是詐尸還是另有隱情,我是刑警寧澤源梭,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布娱俺,位于F島的核電站,受9級(jí)特大地震影響废麻,放射性物質(zhì)發(fā)生泄漏荠卷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一烛愧、第九天 我趴在偏房一處隱蔽的房頂上張望油宜。 院中可真熱鬧,春花似錦怜姿、人聲如沸慎冤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)粪薛。三九已至,卻和暖如春搏恤,著一層夾襖步出監(jiān)牢的瞬間违寿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工熟空, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留藤巢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓息罗,卻偏偏與公主長(zhǎng)得像掂咒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子迈喉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容