Dagger2解耦简易版

来源:互联网 发布:php手机短信验证 编辑:程序博客网 时间:2024/06/05 11:35
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
/**
*类描述:
*姓名 :刘希鑫
*/

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

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

随后,就是调用接口,传入this,就可以直接用上面的注入类对象来调用它的方法了。
public classMainActivity extendsAppCompatActivity {
//通过注解找到注入的类
@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
原创粉丝点击