Dagger2 的使用

首先讲下问什么要使用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 的基本使用,后续更新高级使用,

猜你喜欢

转载自blog.csdn.net/weixin_39413778/article/details/88776292