Dagger2简介(一)

Dagger

A fast dependency injector for Android and Java.

Dagger是一个依赖注入(Dependency Injection,简称DI)框架,butterknife也是一个依赖注入框架。但是Dagger2Butterknife更强大的多,它的主要作用,就是对象的管理,其目的是为了降低程序耦合。

有关注解和ButterKnife的解析请看之前的文章:注解使用及ButterKnife源码解析

那么神马是依赖注入,其实我们一直在用:

  • 通过接口注入

    interface Ib {void setB(B b)
    }
    public class A implements Ib  {B b;@overridevoid setB(B b) {this.b = b;}
    }
  • 通过set方法注入

    public class ClassA {ClassB classB;  public void setClassB(ClassB b) {classB = b;}
    }
  • 通过构造方法注入

    public class ClassA {ClassB classB;public void ClassA(ClassB b) {classB = b;}
    }
  • 通过注解的方式注入

    public class ClassA {//此时并不会完成注入,//还需要依赖注入框架的支持,如Dagger2@inject ClassB classB;public ClassA() {}
    }

说了这么久,也不知道到底这货有什么用,这里举个例子,比如有个类A,他的构造函数需要传入B,C;然后代码里有10个地方实例化了A,那如果功能更改,A的构造函数改成了只有B,这个时候,你是不是要去这10个地方一个一个的改?如果是100个地方,你是不是要吐血?!如果采用dagger2,这样的需求只需要改1-2个地方。这是真的吗?听起来好像挺牛逼的样子。

也有人怀疑Dagger2利用注解是不是采用了反射,会影响性能,这个问题其实在之前的文章ButterKnife源码解析就已经介绍过了。Dagger2ButterKnife这类依赖注入框架都已经采用了apt代码自动生成技术,其注解是停留在编译时,可以不用考虑性能的问题。


更多文章请查看AndroidNote

你的star是我的动力!!!

Dagger2简介(一)相关推荐

  1. Dagger2 简介

    本位参考:https://juejin.im/post/5bcc7151f265da0ab41e8f6e 讲Dagger2就不能不讲依赖注入,因为Dagger2是为了解决这个难题而创造出来的,那么什么 ...

  2. Android依赖注入的实践——Dagger2

    个人博客CoorChice,https://chenbingx.github.io/ ,最新文章将会首发CoorChice的博客,欢迎探索哦 ! 同时,搜索微信公众号CoorChice,或扫描文章末尾 ...

  3. dagger2 注入_如何使用Dagger 2在您的应用程序中实现依赖注入

    dagger2 注入 Kriptofolio应用程序系列-第4部分 (Kriptofolio app series - Part 4) Dependency injection will signif ...

  4. Android神匕首—Dagger2依赖注入框架详解

    简介 Dagger-匕首,鼎鼎大名的Square公司旗下又一把利刃(没错!还有一把黄油刀,唤作ButterKnife) Dagger2 是一个Android依赖注入框架,由谷歌开发,最早的版本Dagg ...

  5. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  6. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  7. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  8. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  9. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

最新文章

  1. 爬虫python代码-Python爬虫入门(01) -- 10行代码实现一个爬虫
  2. 跳一跳python刷分_【Python跳一跳刷分辅助】iPhone版_Python跳一跳刷分辅助Ios最新版下载_Python跳一跳刷分辅助v1.0.1苹果版免费下载 - 九酷苹果网...
  3. leetcode 202. 快乐数 思考分析(哈希集合与双指针解)
  4. mysql简单的sql语句单表分组查询
  5. 力扣141.环形链表
  6. 马斯克称新一代Roadster就有望在2023年开始交付
  7. 程序员一般都浏览这些网站,不仅仅提升编程水平!
  8. Linux中命令选项及参数简介
  9. 内存可见性,指令重排序,JIT。。。。。。从一个知乎问题谈起
  10. SQL Server之旅:(二)Could not load the DLL xpstar90.dll
  11. ubuntu wireshark找不到网卡及开启IP转发
  12. 9WinMap 映射
  13. VS编译间接引用的DLL不一定输出
  14. 计算机网络专助理工程师考试时间,软考高级工程师职称考试时间
  15. STAR-CCM+ 计算RAE-2822翼型在FATP巡航状态下不同攻角下的升力系数。
  16. homeassistant添加米家空调伴侣
  17. JSRUN, 前端教程大家一起来编写
  18. C语言中用do while解决阶乘之和问题
  19. TikTok涨粉?参考抖音?账号增粉解析!
  20. dubbo学习过程、使用经验分享及实现原理简单介绍,dubbo经验分享

热门文章

  1. CGB2202面向对象第9天
  2. 实习了两个月了,说说感悟吧..
  3. 频繁项集挖掘算法在告警关联中的应用
  4. 推荐一款运动型蓝牙耳机、性能好的运动蓝牙耳机
  5. html字号24怎么设置,css怎么设置字体大小
  6. pythonif语句的冒号总是报错_干货:python入门if语句及其列表操作
  7. 追MM和23中设计模式(来自网络)
  8. 如何实时、高效地处理如此海量的路况数据?
  9. JetBrains GoLand 2022 for Mac(GO语言集成开发工具环境)
  10. 2017 年ICPC 中国大陆区域赛铜牌题解