依赖注入之Dagger2初探

Dagger2

    Dagger2是Google提供的依赖注入框架,依赖注入为Android中组件之间的解耦提供了很好的解决方案。Dagger2已经在越来越多的开源项目中被使用,其已经发展成为未来的一个技术趋势。

为什么要使用Dagger2

    MVP设计模式中,M层提供数据,V层做界面展示,而P层则成为M和V的桥梁,这其中就必然涉及到M和V的交互及处理,如果业务复杂或者多个页面共用,它还是面临着高度的耦合性。如果需求发生变动,必然需要更改P中的内容。而在MVP中,我们通常在activity层中需要拿到p层的对象,那么在开发中有可能我们很多activity或者fragment都可能需要拿到这个p层对象的实例,假如我们P层类的构造发生变化我们要在很多地方都得进行修改,这就是耦合度太高的弊端。为了解决这种耦合性的问题,有一帮牛叉的人就思索着:能不能有个容器,这个容器在我们需要用到某个对象的时候帮我们创建好需要的对象,像对象工厂一样,并且帮我们管理这些对象。当发生变化时,我们只需要换一个容器就可以了。就这样,dagger2应运而生。

dagger2中组成内容的对应关系:

类Module:装载对象的容器。

接口Component:存放这些容器的仓库。

注解Provides:该容器创建对象的动作。

注解Inject:从容器中取出这个对象的动作。

注解Qualifier:用来给Inject和Provides贴上关联标签。如果一个对象可以由多个容器提供,这时候就需要用Qualifier进行标签关联。

注解Scope:从容器取出对象的有效期,即生命周期。


如何使用Dagger2

1.增加Dagger2依赖包

dependencies {

    implementation 'com.google.dagger:dagger:2.13'

    annotationProcessor 'com.google.dagger:dagger-compiler:2.13'

    compileOnly 'org.glassfish:javax.annotation:10.0-b28'

}

2.编写Module

@Module

public class LoginModule {

    @ActivityScope

    @Provides

    LoginPresenter getPresenter() {return new LoginPresenter();}}

3.编写Component

@ActivityScope

@Component(modules = {LoginModule.class})

public interface LoginComponent {

    void inject(LoginActivity activity);

}

4.编译一下工程

    AndroidStudio -> Build -> Make Project

5.依赖注入

@Override

protected void onResume({

    super.onResume();

    DaggerLoginComponent.builder().build().inject(this);

    mPresenter.attachV(this);

}

Demo工程

github项目

你可能感兴趣的:(依赖注入之Dagger2初探)