我们知道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如果对我进行实例化,就调用这个构造函数*/@Injectpublic 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 {@InjectUserInfo user; //让dragger2提供实例 变量不可以是private类型private TextView tv;@Overrideprotected 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中创建其他类的实例,我们只需要从容器中获取实例就可以了。
												

Dragger2初体验 -- @Inject @Component 使用相关推荐

  1. MapReduce编程初体验

    需求:在给定的文本文件中统计输出每一个单词出现的总次数 第一步: 准备一个aaa.txt文本文档 第二步: 在文本文档中随便写入一些测试数据,这里我写入的是 hello,world,hadoop he ...

  2. harmonyos能否移植到MCU,HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验

    HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验 硬件平台 基于正点原子战舰V3开发板 MCU:STM32F103ZET6 片上SRAM大小:64KBytes 片上FLASH大小 ...

  3. taro 重新加载小程序_Taro开发微信小程序的初体验

    了解Taro 听说Taro是从几个星期前开始的,在一次饭桌上,一个小伙伴说:"Hey, 你听说了Taro么,听说只需要写一套程序就可以生成H5,小程序以及RN的代码模板,并且类似于React ...

  4. centos安装rabbitmq_【SpringBoot MQ系列教程】RabbitMq 初体验

    SpringBoot 系列教程之 RabbitMq 初体验​mp.weixin.qq.com mq 在异步解耦削峰的优势非常突出,现在很多的项目都会用到,掌握 mq 的知识点,了解如何顺畅的使用 mq ...

  5. vue create()获取ref_vue-next+typescript 初体验

    无意间又一次刷到了尤大介绍 Vue 3 的文章,这次决定试一下 Vue 3 的 TypeScript 支持到底如何,不管别人说什么,只有自己用的舒服才是真的舒服.Vue 2 可是因为 ts 的缘故被喷 ...

  6. Java开发 - Redis初体验

    前言 es我们已经在前文中有所了解,和es有相似功能的是Redis,他们都不是纯粹的数据库.两者使用场景也是存在一定的差异的,本文目的并不重点说明他们之间的差异,但会简要说明,重点还是在对Redis的 ...

  7. Java开发 - 布隆过滤器初体验

    目录 前言 布隆过滤器 什么是布隆过滤器 布隆过滤器的作用 布隆过滤器原理 怎么设计布隆过滤器 布隆过滤器使用案例 安装布隆过滤器 添加依赖 添加配置 添加工具类 添加测试代码 简单测试 特别提醒​​ ...

  8. Java开发 - 消息队列之RabbitMQ初体验

    目录 前言 RabbitMQ 什么是RabbitMQ RabbitMQ特点 安装启动 RabbitMQ和Kafka的消息收发区别 RabbitMQ使用案例 添加依赖 添加配置 创建RabbitMQ配置 ...

  9. k8s_难产的ingress架构初体验(一)

    在 https://editor.csdn.net/md/?articleId=106170316中跟着github中的说明进行了初体验.但是发现并不是每个模块都会用到. github说明 后端ser ...

最新文章

  1. 关闭图片 pycharm_博士大佬总结的Pycharm 常用快捷键思维导图,收藏!
  2. MFC 加载并显示图片的四种方法
  3. 如何预防淋巴癌?(希望分享给更多的人看)
  4. 【NOIP2013模拟联考5】军训(training)
  5. 【机器学习】Python机器学习的神器- Scikit-learn使用说明
  6. Spring mvc HTTP协议之缓存机制
  7. 小程序学习(2):vs code 安装插件
  8. mongdb2008puls4.0.3安装_Mathematica 10.3安装教程
  9. 斗地主AI算法——第九章の被动出牌(3)
  10. DistributionDB过大的原因
  11. mosquitto源码分析(三)
  12. Apache查看并发及TIME_WAIT过多的解决
  13. C++文件读写 ifstream ofstream 完成复制文件功能
  14. java求字符串数组交集、并集和差集
  15. linux 内核参数解释整理
  16. knife4j文档请求异常_umi-request 网络请求之路
  17. PHP在线预览word、excel等office文档
  18. 如何在WordPress中使用SEO写作助手来改善SEO
  19. Windows xp 定时关机命令 [转贴]
  20. window 下蓝牙开发

热门文章

  1. Navicat 12 for MySQL激活方法(注册机)
  2. C语言与java中函数传参比较
  3. execute与executeUpdate的区别(学习笔记)
  4. JDBC之execute、executeQuery和executeUpdate之间的区别
  5. InvalidateRect和Invalidate的区别
  6. Java多重继承的两种方式
  7. 音乐播放器(网页手机版)使用Jquery插件
  8. EF中的EntityState几个状态的说明
  9. 2023COSP深圳户外展行业高峰论坛即将召开!博洋优选也将参加
  10. 2017华为实习生招聘机考模拟题——0交换排序