由来:
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
插件
android-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 的大小。以上两个配置就可以了。
新闻热点
疑难解答