Android Dagger2 的使用(个人笔记)

Dagger2 是 Google 开源的一款依赖注入框架。它的前身是 square 的 Dagger 1,Dagger 2 在 Android 中有着较为广泛的应用。

Dagger 2 基于 Java 注解,采用 annotationProcessor(注解处理器) 在项目编译时动态生成依赖注入需要的 Java 代码,然后我们在合适的位置手动完成最终的依赖注入

第一步 依赖项 :

implementation 'com.google.dagger:dagger:2.4'
annotationProcessor 'com.google.dagger:dagger-compiler:2.4'

第二步 初步使用:

首先 从最简单方式  @Inject 注解开始

public class CameraN {
    private static final String TAG = "CameraN";
    public Camera mCamera;
    public String name;

    @Inject
    public CameraN(){
        this.mCamera = null;
        name= "别去厕所偷吃了";
        Log.e(TAG, "CameraN: 初始化 了 CameraN()" );
    }
    public Camera getmCamera() {
        return mCamera;
    }
}
@Component()
public interface Compenent {

        必须让Component知道需要往哪个类中注入

    void init(CameraXActivity cameraXActivity);
}
    @Inject
    CameraN cameraN;

    @Override
    protected int layoutId() {
        return R.layout.activity_camera_x;
    }

    @Override
    protected void initView() {
        DaggerCompenent.create().init(this);
        Log.e(TAG, "initView: "+cameraN.name );
    }

log.e --> E/CameraXActivity: initView: 别去厕所偷吃了

定义我们所需要的 信息类  @Inject  注解注入 CameraN   的构造函数。

 @Inject : 标识可注入的构造函数、方法和字段。可以应用于静态*以及实例成员。
 可注射成员可以具有任何访问*修饰符(private、package private、protected、public)。构造函数首先被*注入,然后是字段,然后是方法。超类中的字段和方法*是在子类中的那些字段和方法之前注入的。没有指定同一类中的字段之间和方法之间的*注入顺序。

@Component :注释一个接口或抽象类,要从一组{@linkplain#模块}中为其生成一个完全形成的、注入依赖项的*实现。生成的类*的类型名称以{@code@Component}注释,并以{@code Dagger}开头。例如,{@code@Component接口MyComponent{…}}将生成一个名为*{@code DaggerMyComponent}的实现。

会在 build 文件夹 生成编译类  DaggerCompenent.class  供我们在DaggerCompenent.create().init(this);  注册

Log.e(TAG, "initView: "+cameraN.name );  便可以调用 对象方法。

到了这里 初步使用 便结束了。

进一步 使用  直接上代码 (自己悟)

增加

@Module 包裹对象

@Singleton 创建一次

@Component(modules = {目标类 })

@Provides  提供调用

       //包裹 内的物品 CameraNModle.class,CameraNModle2.class  等等
@Component(modules = {CameraNModle.class})
public interface Compenent {
    void init(CameraXActivity cameraXActivity);
}
@Module  //包裹
@Singleton  //
public class CameraNModle {
    @Provides
    public CameraN getCameraUser(){
        return new CameraN();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值