美文网首页
初识 Dagger 2

初识 Dagger 2

作者: raywalker | 来源:发表于2022-01-25 21:29 被阅读0次

介绍

Dagger 2 也依照JSR 330 支持声明注入点(injection sites)。Dagger 2中支持所有Dagger 1 支持的注入类型(按字段和构造方法注入),此外Dagger2 还支持方法注入(method injection),而不支持静态注入(static injection)。对于范型class,Dagger 2 也不提供注入支持。

  • 构造方法注入
class Thermosiphon implements Pump {
  private final Heater heater;

  @Inject
  Thermosiphon(Heater heater) {
    this.heater = heater;
  }
}

通过上面的注入声明,在Dagger创建 Thermosiphon 实例时,Dagger会获取所需的构造方法参数,并调用该构造方法来实现。

  • 字段注入
class CoffeeMaker {
  @Inject Heater heater;
  @Inject Pump pump;
}

与Dagger 1的异同

Module

Dagger 2 中的Module与Dagger 1 中的很类似,但是减少了配置的复杂性。

Provides

Provides 注解与之前有着相同的语义。

Component 与 Builder

与Dagger1中不同的是,不必实例化ObjectGraph对象,而采取定义Component,在其中声明关联的Modules。同时定义Component.Builderinterface可以自定义Component的创建过程。

Component间的关系

Dagger1中使用objectGraph.plus(new ChildGraphModule()), 可以从现有的Graph中创建新的Graph;类似的,Dagger2可以通过定义Subcomponent来实现。

@SubComponent(modules = {ChildGraphModule.class} )
interface MySubcomponent {
}

@Component
interface MyComponent {
  /* Functionally equivalent to objectGraph.plus(childGraphModule). */
  MySubcomponent plus(ChildGraphModule childGraphModule);
}
MySubcomponent mySubcomponent = myComponent.plus(new ChildGraphModule());

Scope

对应不同的生命周期,可以声明有不同生命周期的component(e.g. Android 中Application VS. Activity)。每个component可以通过修饰的scope注解关联到特定的scope。组件的实现确保每个component的实例只有一种对应的scope绑定相关联。如果component声明了一种scope,它就只能包含graph中没有scope的绑定或是相同scope的绑定。

@Singleton  
@Component
interface MyApplicationComponent {
    // this component can only inject types using unscoped or @Singleton bindings
}

Android 上除去样板代码的优化

在扩展对Android支持后,如com.google.dagger:dagger-android:2.16中可以通过AndroidInjection.inject(activity)AndroidSupportInjection.inject(fragment) 注入Activity/Fragment中的依赖。

详细示例可以参考 Google官方 demo Github Browser Sample

Dagger Hilt

随着 Dagger2 的演变,复杂度也随之增长;特定于Android平台上Google推出了基于Dagger2的 Hilt,用以简化Android app中的使用。限于篇幅,待下回分解吧。

References

相关文章

  • 初识 Dagger 2

    介绍 Dagger 2 也依照JSR 330[https://jcp.org/en/jsr/detail?id=3...

  • Android:Dagger2系列3 深入探究

    第一篇:Android:Dagger2系列1 初识第二篇:Android:Dagger2系列2 实例解析待更新.....

  • Android:Dagger2系列2 实例解析(更新完毕)

    上一篇:Android:Dagger2系列1 初识下一篇:Android:Dagger2系列3 深入探究(更新in...

  • Dagger2 初识

    Dagger Android界鼎鼎有名的依赖注入框架,第一代有Square公司开发,第二代这个Google爸爸接受...

  • 初识Dagger2

    【相关链接】(1)https://blog.csdn.net/shusheng0007/article/detai...

  • Dagger

    Dagger on Android-Dagger2详解 使用Dagger 2依赖注入 - API 使用Dagger...

  • Dagger2解析3-SubComponent

    Dagger2系列: Dagger2解析-1 Dagger2解析2-Component的依赖关系 Dagger版本...

  • Dagger2解析5-Qualifier

    Dagger2系列: Dagger2解析-1 Dagger2解析2-Component的依赖关系 Dagger2解...

  • Dagger2解析4-Scope

    Dagger2系列: Dagger2解析-1 Dagger2解析2-Component的依赖关系 Dagger2解...

  • Dagger2入门

    1.Dagger2简介 1.1 Dagger2的描述 Github地址:Dagger2 Dagger2官网上介绍是...

网友评论

      本文标题:初识 Dagger 2

      本文链接:https://www.haomeiwen.com/subject/flkghrtx.html