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);
}
网友评论