Dagger2笔记

添加依赖

//dagger2
    implementation 'com.google.dagger:dagger:2.30.1'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.30.1'

1.在具有构造方法的对象上使用

        1:在构造方法上使用@Inject注解

        2:创建ioc容器组件component,并使用@component

        3:在需要对象的地方声明并使用@Inject

        4:手动进行注入,使用自动生成的component实现类进行注入

        1.第一步

package com.cainiao5.myapplication.di;

import javax.inject.Inject;

public class User {
    //1.在构造方法上使用@Inject
    //作用:使用了@Inject后,annotationProcessor会识别到这个注解然后对这个类进行一些处理
    //告知dagger可以通过构造方法来创建和获取到user的实例
    @Inject
    public User() {
    }
}

        2.第二步

package com.cainiao5.myapplication.di;

import com.cainiao5.myapplication.MainActivity;

import dagger.Component;

//2.创造注入容器
@Component
public interface ApplicationComponent {
    void inject(MainActivity mainActivity);
}

        3.第三步,第四步

package com.cainiao5.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.cainiao5.myapplication.di.DaggerApplicationComponent;
import com.cainiao5.myapplication.di.User;

import javax.inject.Inject;

public class MainActivity extends AppCompatActivity {

    //3.声明注入
    @Inject
    User user;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //4.执行注入动作
        //DaggerApplicationComponent 是第二步的容器的实现类
        DaggerApplicationComponent.create().inject(this);
        System.out.println("user=" + user);
    }
}

        结果

2022-11-10 16:11:27.826 8831-8831/com.cainiao5.myapplication I/System.out: user=com.cainiao5.myapplication.di.User@b6b1c7

说明已经完成注入

2.在没有构造方法的对象上进行注入(由第三方框架提供的eg:R retrofit)

        1.创建module 使用@provide获取retrofit实例

        2.在component上装载module

        3.使用@Inject声明对象

        4.使用自动生成的component实现类去手动注入

        1.第一步:创建module 使用@provide获取retrofit实例

package com.cainiao5.myapplication.di;

import dagger.Module;
import dagger.Provides;
import retrofit2.Retrofit;

//因为一些第三方类,无法在构造方法上加@Inject注解,
// 或者一些类的初始化方式不是通过构造方法实现的,所以需要一个关联关系
@Module
public class NetModule {

    //第二种可以告知dagger,可以通过该方法来获取到对象的实例
    @Provides
    public Retrofit provideRetrofit(){
        return new Retrofit
                .Builder()
                .baseUrl("http://www.google.com")
                .build();
    }
}

        2.第二步:把module装载到component上

package com.cainiao5.myapplication.di;

import com.cainiao5.myapplication.MainActivity;

import dagger.Component;

//2.创造注入容器
@Component(modules = {NetModule.class})
public interface ApplicationComponent {
    void inject(MainActivity mainActivity);
}

         3.第三步:第四步,声明和手动注入

package com.cainiao5.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.cainiao5.myapplication.di.DaggerApplicationComponent;
import com.cainiao5.myapplication.di.User;

import javax.inject.Inject;

import retrofit2.Retrofit;

public class MainActivity extends AppCompatActivity {

    //3.声明注入
    @Inject
    User user;

    @Inject
    Retrofit retrofit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //4.执行注入动作
        //DaggerApplicationComponent 是第二步的容器的实现类
        DaggerApplicationComponent.create().inject(this);
        System.out.println("user=" + user);
        System.out.println("retrofit = " + retrofit);
    }
}

3.作用域

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值