Dagger2 基础 (一)

xiaoxiao2021-02-28  96

最简单的应用

配置环境在根gradle中 dependencies { ... // 其他classpath classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //添加apt命令 } 在App.gradle中 dependencies { compile 'com.google.dagger:dagger:2.x' apt 'com.google.dagger:dagger-compiler:2.x' provided 'javax.annotation:jsr250-api:1.0' } 2.使用@Inject注入 public class RestApiStore { public String s; @Inject public RestApiStore (){ s = "12"; } } //activity中 @Inject RestApiStore apiStore; 3.使用module注入 //Module类 @Module public class MainActivityModule { @Provides RestApiStore provideApiStore(){ return new RestApiStore(); } } //component类 @Component(MainActivityModule.class) public interface MainActivityComponent { void inject(MainActivity mainActivity); } //activity中 @Inject RestApiStore apiStore; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DaggerMainActivityComponent.builder().build().inject(this); }

以上是两种最基本的Dagger2用法。

总结

Inject,Component,Module,Provides是dagger2中的最基础最核心的知识点。奠定了dagger2的整个依赖注入框架。 Inject主要是用来标注目标类的依赖和依赖的构造函数 Component它是一个桥梁,一端是目标类,另一端是目标类所依赖类的实例,它也是注入器(Injector)负责把目标类所依赖类的实例注入到目标类中,同时它也管理Module。 Module和Provides是为解决第三方类库而生的,Module是一个简单工厂模式,Module可以包含创建类实例的方法,这些方法用Provides来标注

注意@Inject并不是万能,对于未知的事物,还是无能为力的。比如,所熟悉的接口,接口并不能创建实例,这时,我们就不能使用@Inject注解。

接口不能够创建第三方库的类不能够创建 配置对象必须配置!

如果两种注入方式都存在,则按以下规则进行

步骤1:查找Module中是否存在创建该类的方法。 步骤2:若存在创建类方法,查看该方法是否存在参数 步骤2.1:若存在参数,则按从步骤1开始依次初始化每个参数 步骤2.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束 步骤3:若不存在创建类方法,则查找Inject注解的构造函数,看构造函数是否存在参数 步骤3.1:若存在参数,则从步骤1开始依次初始化每个参数 步骤3.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束

github地址:https://github.com/zhangyuesx215/Dagger2-MVP

转载请注明原文地址: https://www.6miu.com/read-35565.html

最新回复(0)