Dagger2 基础入门与使用

Dagger2 依赖注入(Dependency injection ),通过注解的形式引入实体类,然后再接口Component作为桥梁沟通Moudle构建工厂模式注入到Activity/Fragment中减少我们new 实体化繁琐操作和统一管理我们的实列化对象

Dagger2官网地址

Gradle 引入 Dagger2

主目录gradle.build

dependencies {
  classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
   }

项目gradle.build

dependencies {
  compile 'com.google.dagger:dagger:2.11'
  annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
  }
Dagger2注入流程图过程

在这里插入图片描述

注意:Component查找优先级Moudle高于Inject

Dagger2 基本使用 @Inject @Moudle @Provides @Component

通过@Inject User 对象,注入一次即可,多个构造函数无须多次注入

package com.lhw.daggerdemo.bean;

import javax.inject.Inject;

public class User {
    private DataInfo mDataInfo;
    public String name;
    public int age;
    public String tag;
    
    @Inject
    public User() {

    }

    public User(DataInfo data, String tagName) {
        tag = tagName;
        mDataInfo = data;
    }


    public User(String tagName) {
        tag = tagName;
    }

    public User(DataInfo dataInof) {
        mDataInfo = dataInof;
    }

}

新建Moudle实体类添加注解@Moudle,添加User实例化方法,给方法添加@Providers注解,提供对外@Component查找
import dagger.Module;
import dagger.Provides;
@Module
public class UserModule {

    @Provides 
    User providerUser(){
        return new User();
    }
 

}

新建接口MianComponent 添加@Component注解,添加 UserModule 到moudles中,然后新增一个inject 方法注入到Activity/Fragment中

注意:这里可以添加多个moudle,也可以通过dependencies依赖其他Component

@Component(modules ={UserModule.class})
public interface MianComponent {
    void inject(MainActivity activity);
}

然后我们点击Build,rebuild project构建项目工程,就会在我们的App build输出目录下面generated/ap_generated_sources/debug/out/packageName/下面出现我们的构建的工厂实体实体类
public final class DaggerMianComponent implements MianComponent {
    ...
 private Provider<User> providerUserProvider;

  private MembersInjector<MainActivity> mainActivityMembersInjector;

  private DaggerMianComponent(Builder builder) {
    assert builder != null;
    initialize(builder);
  }

  public static Builder builder() {
    return new Builder();
  }

  public static MianComponent create() {
    return new Builder().build();
  }
    @Override
  public void inject(MainActivity activity) {
    mainActivityMembersInjector.injectMembers(activity);
  }
    ...
}
最后一步我们把构建好的实体类,注入到Activity/Fragment中
import javax.inject.Inject;
import com.lhw.daggerdemo.component.Dagge
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值