解耦方式
1、利用配置文件,使用反射获取到需要加载的对象。
2、设计模式:单例、工厂、观察者....等
什么是Dagger2?
Dagger2是为安卓和Java平台提供的在编译时进行依赖注入的框架。
注意: Dagger2 不是使用反射的方式进行的,因为反射是在运行时进行的!而Dagger2 是在编译期进行的!
使用Dagger2做什么工作?
主要用于做界面和业务之间的隔离。
操作步骤:
1、指定需要注入的目标
![](https://img.haomeiwen.com/i7286447/1443d383e3470fb5.png)
通过注解去找实例。
需要注意的是使用@Inject注解的变量不能是private变量,否则会报以下错误:
Error:(16, 27) 错误: Dagger does not support injection into private fields
2、创建与类相关的module
![](https://img.haomeiwen.com/i7286447/d4fa08806320f8a7.png)
主要用于对象创建的代码放在里面。注意创建类的时候添加注解@Module 表示创建对象的方法在这里面(指定类) 因为创建对象的语句不能直接放在类里面,所以需要添加一个方法。用@Provides注解表示创建对象的代码在这个方法里面(指定方法)
3、将Avtivity与Module建立起练习
![](https://img.haomeiwen.com/i7286447/7ed17736923869a7.png)
以接口的方式将两者关联 注意注解@Component
4、记得 ReBuild一下 : 在工具在编译期自动生成代码
5、使用
![](https://img.haomeiwen.com/i7286447/1a1da143d13f9583.png)
工作原理:
每个注解都用来做什么工作: 如下图所示
![](https://img.haomeiwen.com/i7286447/76d0b4c3e70d61dc.png)
Dagger2的引入:
配置apt插件(在build.gradle(Project:xxx)中添加如下代码):
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0' //添加apt插件
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
添加依赖(在build.gradle(Module:app)中添加如下代码)
apply plugin:'com.android.application'
//添加如下代码,应用apt插件
apply plugin:'com.neenbedankt.android-apt'
...
dependencies {
...
compile'com.google.dagger:dagger:2.4'
apt'com.google.dagger:dagger-compiler:2.4'
//java注解
compile'org.glassfish:javax.annotation:10.0-b28'
...}
网友评论