Dagger2.0基本使用及简单原理

来源:互联网 发布:tim 钉钉 知乎 编辑:程序博客网 时间:2024/05/10 12:35

一.Dagger2.0背景

        依赖注入主要解决代码耦合性问题,使对象在一个封闭,独立的地方初始化,当对象的实现方法需要大量修改的时候不需要大改代码库。

        在Android中的应用主要是在MVP模式中P层与V层的解耦,以及在网络请求中配合Retrofit2.0进行网络请求。

二.比较

        依赖注入分为两种:反射和APT工具

        反射:利用java代码反射的原理,在代码执行期间实现依赖注入。缺点是:性能不好,比较耗时,比如xutils注解

        APT工具:是在代码的编译期间就生成对应对象的java文件。优点是:性能比较好,犹如自己写的代码一样,比如BufferKnife,Dagger2.0

三.使用

        Dagger2.0依赖Apt代码生成工具,Dagger2指定注解,然后APT工具根据我们的注解自动生成注入文件

        基础使用有四个注解:

        @Inject:指定目标对象,通常在需要注入的地方作为标记

        @Module:指定对象创建所在的类

        @Provide:指定对象创建所在的方法

        @Component:把目标对象和创建对象实例化的容器关联在一起

      步骤

1.   @Inject       StudentPresenter presenter;   //指定注入对象

2.   @Module     public class StudentModule{          @Provide          StudentPresenter provideStudentPresenter(){              return new StudentPresenter();     //返回初始化对象          }     }

3.   @Component (modules = Student.class)        public interface StudentComponent{          void in(Student mStudent);  //指定依赖注入所在的类     }
4.  编译

5.   DaggerStudentComponent component  = (DaggerStudentComponent)DaggerStudentComponent.builder()                                         .studentModule(new StudentModule())                                         .build();      //DaggerStudentComponent类名是根据我们注解的类的名字所生成的     component.in(this);     presenter.方法;

        四者之间的关系就像是我们创建对象的一个表达式

        比如:Student    mStudent                       =                            new Student();

                               @Inject                      @Component                 @Modules   @Provide

        只不过是通过注解在创建对象的时候,把创建过程放在了封闭独立的容器中,达到了高度解耦的效果

四.小结

        以上只是对Dagger2中四个注解的使用,此外还有@Scope(可以自定义注解)   @Qualifier(标示类的类型不同的类的依赖)

        至于Dagger2.0的一些高级的使用以及APT工具是如何根据我们的注解来生成对应的代码的,后续博客会写到,期待吧...大笑


0 0
原创粉丝点击