美文网首页
Android - thirdlib - dagger

Android - thirdlib - dagger

作者: simplehych | 来源:发表于2020-05-17 10:18 被阅读0次

    未完待续 ing

    关键字

    Annotation
    DI(Dependency Injection)
    IOC
    AOP
    apt
    目标类

    日常目标类组合方式

    1. 构造方法 new(硬初始化)
    2. get 方法传入(工厂模式)
    3. set 方法传入
    4. 接口调用
    5. 注解

    场景:

    1. MVP 模式下,Activity 需要持有 Presenter 的引用,Presenter 又需要依赖 View 接口,耦合在一起

    作用

    1. 解耦,方便测试
    2. 更好的管理类实例。1. 管理全局类实例;2. 管理页面类实例;
    3. 省去重复的工作。1. 实例;2.单例,不用关心饿汉还是懒汉;

    使用

    核心:@Inject、@Component、@Module/@Providers
    辅助:@Qualifier、@Scope、@Singleton

    方式一:@Inject - @Component - @Inject(注解标注)优先级低

    @Inject 使用时不能用 private 修饰成员属性
    标记属性 和 标记构造方法

    方式二:@Inject - @Component - @Module/@Providers(工厂模式)优先级高
    @Module 提供给无构造方法的类,不能用 Inject,如第三方库/系统类/接口
    @Providers

    划分 Component:

    1. 全局 ApplicationComponent
    2. 页面 Component
      注意粒度不能太小

    @Qualifier 限定符,解决依赖注入迷失问题(构造方法重载情况)使用方式?
    @SubComponent
    @Scope
    @Singleton 是 @Scope 的一种实现

    1. 没有创建单例的能力
    2. 作用:更好的管理 ApplicationComponent 和 Module 关系,保证匹配,否则编译报错;代码可读性;

    组织 Component:类实例共享

    1. 依赖方式,dependencies 属性
    2. 包含方式,SubComponent
    3. 继承方式,抽象到父类中

    @Scope 的真正用处在于 Component 的组织,Component 之间和 Component 和 Module 之间,不一样就会报错

    注意点:

    1. @Scope 非必须
    2. Component 可以没有 Module
    3. 多个页面可以共享一个 Component
    4. 一个页面必须要有一个 Component 管理整个全局类实例

    生成代码分析:

    1. Provider 类型

    参考资料

    Android:dagger2让你爱不释手 系列
    Dagger2 从入门到放弃再到恍然大悟

    相关文章

      网友评论

          本文标题:Android - thirdlib - dagger

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