首先讲下问什么要使用Dagger2
假如有如下的代码:当User的构造方法发生变化的时候,MainActivity中创建User对象的代码也需要发生变化,此时Dagger2就发挥了它的作用。
class MainActivity{
public void onCreate(){
User user = new User("lgj",28);
}
}
class User{
public User(String userName,int age){
this.userName = userName;
this.age = age;
}
}
dagger2 依赖注入,依赖的意思就是,MainActivity 对某个对象(User)持有引用,即就是依赖这个对象(User),这样做的话,MainActivity 和User对象
耦合度太高,当User的构造方法发生变化时,此时MainActivity 持有的user对象这块也需要改变,耦合度太高,Dagger2 很好的解决了这个问题
怎么使用:
dagger2使用很简单,想要用User 对象,此时会有一个容器DI (dependence inject),这个容器专门负责获取User 对象,然后把User对象注入到MainActivity中去
最终MainActivity中就存在User对象的引用
public class User {
public String name;
public int age;
public User(String name,int age){
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
创建module,用来生产对象
@Module
public class MainModule {
@Provides
public User getInstance(){
return new User("lgj",28);
}
}
把模型放到容器中,即就是2者关联起来
@Component(modules = MainModule.class)
public interface MainComponent {
public void inject(MainActivity mainActivity);
}
最后使用User对象
public class MainActivity extends AppCompatActivity {
@Inject
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MainComponent build =
DaggerMainComponent.builder().mainModule(new MainModule()).build();
build.inject(this);
Toast.makeText(this,user.toString(),Toast.LENGTH_SHORT).show();
System.out.println(user.toString());
}
}
这只是dagger2 的基本使用,后续更新高级使用,