Dagger2 到底能为我们做些什么?(大厂都在用的秘密?)
🥰第一章 IOC注入技术Dagger2 🥰
Dagger2 目录
- 前言
- 🔥🔥🔥一、为什么要用Dagger2
-
- 🚀🚀🚀1、Butterknife 与 Dagger 2的区别
- 🚀🚀🚀2、IOC 控制反转
- 🔥🔥🔥二、Dagger2 使用篇
-
- 🚀🚀🚀1、导入Dagger2
- 🚀🚀🚀2、示例演示
- 总结
前言
在文章开始之前,我们先来了解一下什么是Dagger2 🙀🙀🙀
😻😻1、
Dagger2
是 Dagger 的升级版,是一个依赖注入的框架。
😻😻2、Dagger2
的主要作用就是解耦,降低代码的耦合度,依赖注入是面向对象的一种设计模式,其目的就是为了降低程序耦合度。
😻😻3、隔离,相当于对对象进行了封装包裹管理,发生变换的只有一个地方
😻😻4、之前模式(目标要去管理类,和类产生关系),Dagger2
(目标 和 对象 都需要交给Dagger
来管理)
😻😻5、由Dagger
统一管理了,内存释放什么的,都由Dagger
去控制(grill 再也不用担心泄漏的问题了)
大厂 公司用的非常多
🔥🔥🔥一、为什么要用Dagger2
🚀🚀🚀1、Butterknife 与 Dagger 2的区别
1、
Butterknife
目的为视图绑定,绑定到inflate的views 里面(目前已经被淘汰了哈)
2、Dagger2
目的为能够注入到任何你想要的对象;
3、Dagger2
可以降低(程序中对象的)耦合度(依赖注入)
🚀🚀🚀2、IOC 控制反转
IOC (Inversion of Control)
是原来由程序代码中主动获取的资源,转变由第三方获取并使原来的代码被动接收的方式,以达到解耦的效果,称为控制反转。
这里来张图哈,说白了,IOC 就相当于一个保姆,你想要干哈,直接告诉保姆呗💕💕💕
🔥🔥🔥二、Dagger2 使用篇
🚀🚀🚀1、导入Dagger2
//noinspection GradleDependency
implementation 'com.google.dagger:dagger:2.41'
// 导入API 支持,包括注解
annotationProcessor 'com.google.dagger:dagger-compiler:2.41'
// 使用Dagger2 的注解处理器APT
🚀🚀🚀2、示例演示
下面我们看张生活中的图:👓👓👓
很简单的一张图呢,我们买了商品,商品经过打包,快递员拿到包裹,直接送到你的手上。Goods -> GoodsModule -> GoodsComponent -> activity
整个流程是不是清晰了很多呢?😁😁😁
㊀
/** * 商品类 */public class Goods { Goods(){}}
㊁
/** * 包裹类 */@Modulepublic class GoodsModule {// 暴露我们的商品 @Provides public Goods getGoods(){ return new Goods(); }}
㊂
/** * 快递接口 */@Component(modules = GoodsModule.class)public interface GoodsComponent { void injectMainActivity(MainActivity activity);}
㊃
public class MainActivity extends AppCompatActivity { @Inject Goods goods; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // DaggerGoodsComponent.create().injectMainActivity(this); 这种方式基本不会使用DaggerGoodsComponent.builder() .goodsModule(new GoodsModule()) .build() .injectMainActivity(this); Toast.makeText(this, ""+ goods.hashCode(), Toast.LENGTH_SHORT).show(); }}
总结
看了上面的代码,有没有发现,代码简单了很多呢?我们告别了传统 Goods goods = new Goods()
的代码,大大的降低了代码的耦合度,只需要在需要使用的地方,使用一个注解 @Inject
就可以直接调用了。以后我们也可以这样写代码的话,能不能升职加薪,迎娶白富美呢🤔🤔🤔。当然不是咯,现在Dagger2 基本上已经被淘汰了,为什么呢?因为还是太难用呗
㊙㊙㊙
下一节,我们讲解 jetpack 中的 hilt 它是基于Dagger2 的二次封装