Dagger2,一步一步到理解到使用

Dagger2

知识回顾

核心,dagger2中的Inject,Component,Module,Provides...

前景:

依赖注入(Dependency Injection简称DI

java中注解(Annotation)

@Inject:用注解(Annotation)来标注目标类中所依赖的其他类,同样用注解来标注所依赖的其他类的构造函数;

 

扫描二维码关注公众号,回复: 1116358 查看本文章

@Component:Component也是一个注解类,一个类要想是Component,必须用Component注解来标注该类,并且该类是接口或抽象类;

 

Component需要引用到目标类的实例,Component会查找目标类中用Inject注解标注的属性,查找到相应的属性后会接着查找该属性对应的用Inject标注的构造函数(这时候就发生联系了),剩下的工作就是初始化该属性的实例并把实例进行赋值。因此我们也可以给Component叫另外一个名字注入器(Injector);

总结:

目标类想要初始化自己依赖的其他类:

Inject注解标注目标类中其他类

Inject注解标注其他类的构造函数

若其他类还依赖于其他的类,则重复进行上面2个步骤

调用Component(注入器)的injectXXX(Object)方法开始注入(injectXXX方法名字是官方推荐的名字,以inject开始)

Module:

Component是注入器,它一端连接目标类,另一端连接目标类依赖实例,它把目标类依赖实例注入到目标类中。上文中的Module是一个提供类实例的类,所以Module应该是属于Component的实例端的(连接各种目标类依赖实例的端),Component的新职责就是管理好Module,Component中的modules属性可以把Module加入Component,modules可以加入

多个Module。


Provides最终解决第三方类库依赖注入问题

Module中的创建类实例方法用Provides进行标注,Component在搜索到目标类中用Inject注解标注的属性后,Component就会去Module中去查找用Provides标注的对应的创建类实例方法,这样就可以解决第三方类库用dagger2实现依赖注入了。

总结

Inject,Component,Module,Provides是dagger2中的最基础最核心的知识点。奠定了dagger2的整个依赖注入框架。

Inject主要是用来标注目标类的依赖和依赖的构造函数

Component它是一个桥梁,一端是目标类,另一端是目标类所依赖类的实例,它也是注入器(Injector)负责把目标类所依赖类的实例注入到目标类中,同时它也管理Module。

Module和Provides是为解决第三方类库而生的,Module是一个简单工厂模式,Module可以包含创建类实例的方法,这些方法用Provides来标注。

 

 以上内容仅供参考学习,内容来自学习博客~~~


猜你喜欢

转载自blog.csdn.net/diminess/article/details/78778138