*8*## 依赖注入框架 -> Dagger2

1,它是什么?

2,它的优势?

3,怎样使用它?

  • 对象的依赖关系和生命周期都由它来帮我们管理

    一个inject,它会按照依赖关系帮我们注入我们需要的对象,并且会管理好每个对象的生命周期,在生命周期还没结束的情况下,是不会重复new的,所以Dagger非常适合大项目。

  • @inject注解,用它告诉Dagger,类或者字段需要依赖注入,这样,Dagger就会构造这个类的实例,并满足他们的依赖

  • @Moudle注解 专门提供依赖

  • @Provide注解 在Moudle中我们定义的方法会用到这个注解

  • @Commponent 连接inject和Moudle的桥梁,我们用Commponent注解一个接口,然后列出所有的@Moudles组成该组件。

  • @Scope 限定注解作用域,定义范围的粒度

  • @Qualify注解 我们的context,有Activity的,有Fragment的,@ForActivity,@ForFragment这种注解方式表达我们想要的context


观点

  • Moulde其实就是一个简单的工厂模式,Moudle里面的方法基本都是创建类的实例的方法。第三方类库,我们可以这么管理:

      @Moulde
      class Boss {
          //A是第三方类库的一个类
          A provideA() {
              return A();
          }
      }
    

Moudles中的各种创建类的实例的方法通过Provides注解与Inject注解标注的依赖产生关联。

Commponent搜索到目标类中用inject注解标注的属性后,Commponent会去Moudle中查找用provide标注的方法,第三方类库可以用Dagger2实现依赖注入。


类实例共享

  • 一个Commponent是包含多个Commponent,这就像Acticity和Fragment的关系。

  • Component和Commponent之间有包含或者依赖关系。

  • 因为Commponent和Moudle,整个app的类实例结构变得很简单。

依赖注入是面向对象编程的一种设计模式,其目的的降低程序之间的耦合,这个耦合就是类之间的依赖引起的。

Dagger2有别于其他依赖注入框架,它是通过APT插件在编译阶段生成相应的注入代码。

results matching ""

    No results matching ""