我所理解的Dagger2

来源:互联网 发布:linux安装插件 编辑:程序博客网 时间:2024/05/17 02:47

在上一篇中简单的理解了一下什么是依赖注入:依赖注入的简单理解


这一片简单的记录一下自己对Dagger2的理解:(网上资料数不胜数,这里我也是在此基础上增加自己的一点理解)


Dagger2:

我们先来了解一下Inject,Component,Module,Provides之间的关系:



不知道有没有看明白:

1、Inject主要是用来标注目标类的依赖:

可以这样认为,你在Activity中要用到Person类,那么你只需在这个属性上标注@inject

@Injectpublic Person mPerson;
2、Component它是一个桥梁,一端是目标类,另一端是目标类所依赖类的实例,它也是注入器(Injector)负责把目标类所依赖类的实例注入到目标类中,同时它也管理Module。那么它是怎样工作的呢:

Component会查找目标类(这里指MainActivity)中用Inject注解标注的属性(即Person类),查找到相应的属性后会接着查找该属性对应的用Inject标注的构造函数(在使用Module时,可以不用@inject对Person中的构造函数进行注释)。

@Component(modules = TestModule.class)//这里的Module(TestModule)类可以看成一个工厂,专门生产Person对象的public interface TestComponent {    void inject(MainActivity activity);}

3、Module中的创建类实例方法用Provides进行标注,Component在搜索到目标类中用Inject注解标注的属性后,Component就会去Module中去查找用Provides标注的对应的创建类实例方法,这样就可以解决第三方类库用dagger2实现依赖注入了。Module和Provides是为解决第三方类库而生的,Module是一个简单工厂模式,Module可以包含创建类实例的方法,这些方法用Provides来标注。

@Modulepublic class TestModule {    public Activity mActivity;    @Provides    public Person providesPerson() {        return new Person();//这里new出一个Person对象    }} 

接下来的变动操作都放在Module类中进行更改就可以了。

注意,接下来高能预警:

Dagger2的实现原理是怎样的,我们可以跟中代码过程:

通过对代码的追踪,可以看出,和上一篇中所理解依赖注入的思想是差不多一致的:通过接口的形式传递一个实例到当前的界面中,而不是从新new一个。如有错误之处还望指点.....



依赖注入的简单理解



0 0
原创粉丝点击