Dagger2解耦简易版

来源:互联网 发布:matlab软件介绍 编辑:程序博客网 时间:2024/06/05 22:37
Dagger2 是一个Android依赖注入框架,由谷歌开发,最早的版本Dagger1 由Square公司开发。依赖注入框架主要用于模块间解耦,提高代码的健壮性和可维护性。
//添加依赖
compile'com.google.dagger:dagger:2.9'
annotationProcessor'com.google.dagger:dagger-compiler:2.9'

然后就是写出需要注入的类,里面写上方法,例如:
/**
*类描述:用来注入的类
*姓名 :
*/

public classGenlei {
private inta;
//无参方法
public voidgetin(){
Log.e("---------","通过依赖注入调用的方法");

}
//有参方法
public voidsetin(@NonNullString str){
Log.e("==========",str+"::");
}
}

然后就是在创建一个类,用来实例化注入的类,并不在调用的类里面实例化,这样就可以进行一个解耦,但是注意的是,这个类要用@Module修饰,里面的方法也要用@Provides修饰,例:

/**
*类描述:注入中间类
*姓名 :
*/
@Module
public classZhurulei {
@Provides
Genlei getgenlei(){
//实例化根类
return newGenlei();
}
}

然后就是写一个接口,通过注解将关联类导入,通过抽象方法传入this
宁波整形医院http://www.lyxcl.org/
宁波整形美容医院http://www.zuanno.com/


/**
*类描述:
*姓名 :刘希鑫
*/

@Component(modules = Zhurulei.class)
public interfaceZhurujiekou {
voidinject(MainActivity mainActivity);
}

然后,只要在调用类里通过注解将注入类的对象创建出来@Inject
然后在Build中解析一下就可以了

随后,就是调用接口,传入this,就可以直接用上面的注入类对象来调用它的方法了。
public classMainActivityextendsAppCompatActivity {
//通过注解找到注入的类
@Inject
Genleigenlei;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

DaggerZhurujiekou.create().inject(this);
genlei.getin();
genlei.setin("这是调用的有参方法");
}
}

以上就是一个最简单的依赖注入,不过一样可以进行解耦操作,只要在和MVP关联上,一个解耦的MVP就完成了,当然,你也可以在添加一些其他方式,比如,MVP+Rxjava+Retroffit+Dagger2。

下面就是对于依赖注入的讲解,也就是Dagger2
我们平时使用MVP框架的时候,还是会在View层里new出P层,这样就进行了一个绑定,违反了android的单一职责和解耦性,而且也会因为View层销毁而P层生命周周期还没有走完造成的生命周期不一致的内存泄漏。
而Dagger2就是为了解除绑定,避免内存泄漏的一种方法,通过第三方类或者接口,来实例化P层然后注入到View层,而View层只管调用注入的数据,并不去管P曾德生命周期,这样两者之间并没有具体的关联,全都有第三方来管理,而这时如果View层销毁了,那么因为没有关联,那么P层自然也不会因为生命周期不一致而造成内存泄漏。


依赖注入的过程:
  • @Inject 带有此注解的属性或构造方法将参与到依赖注入中,Dagger2会实例化有此注解的类
  • @Module 带有此注解的类,用来提供依赖,里面定义一些用@Provides注解的以provide开头的方法,这些方法就是所提供的依赖,Dagger2会在该类中寻找实例化某个类所需要的依赖。
  • @Component 用来将@Inject和@Module联系起来的桥梁,从@Module中获取依赖并将依赖注入给@Inject
原理我没屡明白,想要了解的童鞋去看看下面的网址
原理可以参考:http://www.jianshu.com/p/39d1df6c877d
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕期老公不知道关心不体贴怎么办? 中国和伊朗做贸易美国制裁怎么办 土地被村民霸占村长解决不了怎么办 村支书霸占群众选举村长的票怎么办 苹果手机自带的音乐软件删了怎么办 不小心把手机系统软件删了怎么办 佳能打印机打相片是打不全怎么办 卖家说我寄回去的包是假的怎么办 辞职后原单位没把档案给转出怎么办 天下行以租代购要起诉我怎么办 顺丰收件人电话地址都写错了怎么办 领导问任务完不成怎么办怎么回答 我和我老婆感情出现问题了怎么办 手机坏了手机浏览器里照片怎么办 不小心把电脑ie浏览器删了怎么办 华为手机自带浏览器中病毒了怎么办 手机打开浏览器提示中病毒了怎么办 手机卸载了浏览器和软件商店怎么办 房东在我租房期间贴房子出租怎么办 额头上毛孔大 还有些黑怎么办 孩子学跳舞老师压的疼怎么办 步步高点读机电池坏了怎么办 电脑连接受限制或无连接怎么办 电脑无线网受限制或无连接怎么办 电脑网络受限制或无连接怎么办 3 证书报考大专证书丢了怎么办 广工期末考试被老师警告了怎么办 我在农村不当队长我能力不够怎么办 我在农村不当队长我当代表怎么办 北京本地人社保中间断了一年怎么办 我想把大哥的孩子带出国要怎么办 美国有亲戚想让孩子出国怎么办 连接温控器的线断了怎么办 植发后好多原生发都脱落了怎么办 4岁宝宝支体能力差怎么办 当与游客发生矛盾时员工怎么办 顾客与同事发生矛盾你该怎么办 当一个人犯下的过错难以原谅怎么办 开车把别人撞成植物人了该怎么办 结婚证丢了孩子上不上学了怎么办 办房产证前加户主姓名怎么办手续