Dagger2 (一) 前序:What is Dagger2 ?
🚑

Dagger2 (一) 前序:What is Dagger2 ?

一、Why、What? Dagger2是谁,为什么聊起它?


第一次听到Dagger2的话,我们可能会有点陌生。那我们先简单介绍一下它:

  1. 为什么后面会有”2“呢?因为它是基于 square开发的dagger基础上迭代开发的.
  1. Dagger2为google 开源的依赖注入框架.
  1. github上获取了 16.5k的小星星⭐️.
 

1.1 什么是依赖注入(简称DI)

好文推荐:https://www.zhihu.com/question/32108444,我在来总结一下:
  1. 背景介绍:在常规A类如依赖B类的话,我们通常会使用两种方式进行处理。
    1. 在A类中直接创建对应需要的B类对象。
    2. 通过硬编码的方式直接由上游进行传递.
    3. 但以上两种方案,咱们是否有发现如果该种方式遍布在工程四处时。我们如果需要进行改造的话将是一件积极恶心的事情,需要对各种上下游流程进行改造。这也就是我们常说到的 — 《不解耦》问题.
  1. 方案:那么这个时候我则需要进行优化 - IOC(控制反转),则依赖注入/DI其实是一种实现IOC极其优秀的解决方案,想定义这样的框架,它至少需要3个主要步骤:
    1. 需要一个第三方控制容器(它需要什么都懂,只要给命令它都能帮你做到)
    2. 把命令标准定出来. (注解,和注解代码实现)
    3. 让主类使用命令来标记被依赖的类
如图:
notion image
 

1.2 依赖入住的好处:

如上图,我们其实可以看到Person类中其实是依赖IPhone(手机)的,按正常流程其实是需要进行硬编码填充对象,但我们实现了一个IOC容器从而将IPhoneX、Android12都注入至该容器中。当Person对象要使用的时候我们则通过命令的标准(注解)来直接获取即可。这样就可以达到一个很好的解耦.

二、How? 我们可以采用Dagger2以上图中整套DI机制.


2.1 优势解释:

  1. Dagger2 同时提供了完整的标准机制,也是实现了工程内依赖标准.
  1. Dagger2 是采用注解来定义标准,同时使用了APT机制来实现标准。相比反射的方式来说大大的提高了运行效率.

2.2 代码解释:

常规未使用Dagger2框架实现:
public class MainClass {
    private  void main(String [] args){
        John john = new John("john",12);
        john.introduceSelf();
    }
}
使用Dagger2框架后实现:
public class MainClass {
	@Inject
	John john;

    private  void main(String [] args){
        john.introduceSelf();
    }
}
 
以上代码虽然未有实际代码量的减少,但是我们可以看到,john成员变量并未在MainClass中进行硬编码了。而是通过外部定义来传递给与MainClass对象。从而达到了 解耦.
 

ps:以上就是Dagger2的简单介绍,感谢阅读。如出现错误,强烈欢迎指正.