由來:
Dagger2(匕首),是由Google公司開發的依賴注入框架,之所以稱之為Dagger2,是因為他是基于square開發的dagger的基礎上開發的
作用:
1:增加開發效率(不用頻繁的去寫重復的代碼)
首先new一個實例的過程是一個重復的簡單體力勞動,dagger2完全可以把new一個實例的工作做了,因此我們把主要精力集中在關鍵業務上、同時也能增加開發效率上。省去寫單例的方法,并且也不需要擔心自己寫的單例方法是否線程安全,自己寫的單例是懶漢模式還是餓漢模式。因為dagger2都可以把這些工作做了。
2:更好的管理實例
每個app中的applicationComponent管理整個app的全局類實例,所有的全局類實例都統一交給ApplicationComponent管理,并且它們的生命周期與app的生命周期一樣。每個頁面對應自己的Component,頁面Component管理著自己頁面所依賴的所有類實例。因為Component,Module,整個app的類實例結構變的很清晰。
3:解耦
假如不用dagger2的話,一個類的new代碼是非常可能充斥在app的多個類中的,假如該類的構造函數發生變化,那這些涉及到的類都得進行修改。設計模式中提倡把容易變化的部分封裝起來。
優勢:
Dagger2的原理是在編譯期生成相應的依賴注入代碼。這也是和其他依賴注入框架不同的地方,其他框架是在運行時期反射獲取注解內容,影響了運行效率;
配置:
1 : 在工程的build.gradle文件中添加android-apt插件
123456789101112android-apt是Gradle編譯器的插件,根據其官方文檔,主要兩個目的:
編譯時使用該工具,最終打包時不會將該插件打入到apk中。
能夠根據設置的源路徑,在編譯時期生成相應代碼。
2 : 在app的中的build.gradle文件中添加配置apply plugin: 'com.android.application'// 應用插件apply plugin: 'com.neenbedankt.android-apt'android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.mahao.alex.architecture" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false PRoguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.3.0' // dagger 2 的配置 compile 'com.google.dagger:dagger:2.4' apt 'com.google.dagger:dagger-compiler:2.4' compile 'org.glassfish:javax.annotation:10.0-b28'// 添加java 注解庫}12345678910111213141516171819202122232425262728293031323334351234567891011121314151617181920212223242526272829303132333435以上兩個配置就可以了。
dagger是主要的工具類庫。dagger-compiler為編譯時期生成代碼等相關的類庫。在android-apt的文檔中,也推薦使用這種方式。因為,編譯時期生成代碼的類庫在運行期并不需要,那么將其分為兩個庫,(運行類庫dagger)和(編譯器生成代碼類庫(dagger-compiler)),那么在打包時,就不需要將dagger-compiler打入其中(用不到),減小APK 的大小。以上兩個配置就可以了。
新聞熱點
疑難解答