Dagger2总结
Dagger是什么?
Dagger是一个依赖注入框架,由Square公司共享出来的,第二代则是谷歌接手,现在由Google接手维护
依赖
依赖是指某个模块A要实现某个功能需要其他模块B。最原始也最简单的的方式是在模块内new一个B的对象出来,这样会造成B的构造函数修改,需要修改A中的代码,两者耦合度非常高。
依赖注入
依赖注入是不在A中去创建 B的实例,而是让上层调用者注入一个B的对象,这样可以让模块A不再因为B的构造方法的修改而改变
举列如下:
public class ClassA{
private ClassB b
public ClassA(ClassB b){
this.b = b }
}
以上不符合开闭原则,这时就该使用Dagger2。
public class ClassA{
@inject
private ClassB b
public ClassA(){
}
}
运用注解将ClassB注入到ClassA中,可以不影响ClassA的使用。
Dagger2的基本使用
需要用到的依赖:
//Dagger2依赖
implementation 'com.google.dagger:dagger:2.23.2'
annotationProcessor 'com.google.dagger:dagger-compiler:2.23.2'
一、创建注解提供类
//创建需要注入的类
public class ProviderClass {
//给构造添加@Inject注解,表明对外提供依赖
@Inject
public ProviderClass(){//提供无参构造
}
//自己定义的方法
public String getdata(String aa){
return "我是"+aa;
}
}
二、搭建桥梁
//创建注解桥梁表示向谁注入
@Component
public interface MyInterface {
void inject(MainActivity mainActivity);
}
三、在注入的类中,成员变量上加上@Inject表示注入的类,直接调用方法即可
public class MainActivity extends AppCompatActivity {
@Inject
public ProviderClass providerClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//这个是在搭建好桥梁后
//build/generated/ap_generated_sources/debug/out在这个路径下找到DaggerMyInterface
//这一行是在调用类中加载Dagger,然后就可以调用方法了
DaggerMyInterface.builder().build().inject(this);
//调用的方法
String getdata = providerClass.getdata("XXX");
//打印实现的效果
Log.i("###","打印:---"+""+getdata);
}
}