Dragger2初体验 -- @Inject @Component 使用

本文介绍依赖注入的概念及其优势,并通过Dagger2演示如何在Android应用中实施依赖注入,包括环境搭建、注解使用及简单实例。

我们知道Dagger是一个依赖注入的框架,那么什么是依赖注入呢?

我们在activity中有可能会用到很多很多的类,这些类要在activity中进行实例化,这样就导致我们的activity非常依赖这么多的类,这样的程序耦合非常严重,不便于维护和扩展,有什么办法可以不去依赖这些类呢,这时候就需要有一个容器(IoC),将这些类放到这个容器里并实例化,我们activity在用到的时候去容器里面取就可以了,我们从依赖类到依赖这个容器,实现了解耦,这就是我所理解的依赖注入,即所谓控制反转;

现在让我们开始学习大笑

首先我们需要掌握两个重点

1)Dragger2环境搭建

2)@Inject和@Component 的含义

第一部分:环境搭建

在app gradle中添加项目依赖

implementation 'com.google.dagger:dagger:2.11'
annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
第二部分:注解的使用
在使用之前我想先用自己的话来解释这两个基础注解的含义
@inject:
1)如果放在构造函数上,就是告诉Dragger2如果实例化我的时候,就调用该构造函数
2)如果放在变量上,就是告诉Dragger2我要被使用了,md快点实例化我,生成实例对象
@Component:
一般用在标注接口,有点像办事处,谁需要容器中的实例,首先需要在着进行注册。
备注:在代码编写过程中 我们会发现DaggerActivityComponent会不存在,这是因为注入器是在编译的过程中才生成,所以我们在对注入器编写完成后
实例代码教程:
创建一个组件
public class UserInfo {
    private String name;

    /**
     *告诉Dragger2如果对我进行实例化,就调用这个构造函数
     */
    @Inject
    public UserInfo() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
创建一个装组件的容器接口
/**
 * Created by malei on 2018/3/20.
 */

/**
 *  Component一般用来标注接口,被标注了Component的接口在编译时会产生
 *  相应的类的实例来作为提供依赖方和需要依赖方之间的桥梁,把相关依赖注入到其中。
 *  
 *  创建一个@Component标注的注入器接口,
 *  并在注入器中使用 void inject(MainActivity MainActivity);
 *  来表明哪里要用到注入器;
 */
@Component
public interface ActivityComponent {
    void inject(MainActivity MainActivity);
}
使用容器中的组件
/**
 * 在MainActivity中对注入器进行初始化DaggerActivityComponent.builder().build().inject(this);
 * 初始化后该注入器就可以正常使用了;
 * 在MainActivity中对需要注入的类  UserInfo用@Inject进行标注,表示该类需要被注入,即实例化;
 *
 * 注意:在代码编写过程中 我们会发现DaggerActivityComponent会不存在,
 * 这是因为注入器是在编译的过程中才生成,所以我们在对注入器编写完成后
 */
public class MainActivity extends AppCompatActivity {

    @Inject
    UserInfo user; //让dragger2提供实例 变量不可以是private类型
    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DaggerActivityComponent.builder().build().inject(this);

        user.setName("malei");

        tv = (TextView)this.findViewById(R.id.tv);
        tv.setText(user.getName());

    }
}

这样一个最基础的依赖注入就完成了。我们不需要在activity中创建其他类的实例,我们只需要从容器中获取实例就可以了。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值