dagger2 Deja que lo dejes: El fin

http://android.jobbole.com/82705/

Prefacio

Si no tiene claro el concepto de dagger2 y todo el marco de inyección de dependencia, primero puede comprender mis dos primeros artículos:

" Dagger2 te hace amarlo: marco básico de inyección de dependencias "
" Dagger2 te hace amar: conceptos clave e integración "

Estos dos artículos también han recibido elogios y preguntas de muchos internautas. Gracias por su apoyo. Probablemente resumí las siguientes preguntas:

  • ¿Cuáles son los beneficios de dagger2?
  • ¿Cómo usar dagger2?

Así que combinaré estos dos puntos para explicar este artículo. Y habrá muestras específicas.

¿Cuáles son los beneficios de dagger2?

Vayamos directamente al tema:

Aumente la eficiencia del desarrollo y ahorre trabajo manual simple repetido

En primer lugar, el proceso de una nueva instancia es un trabajo manual simple y repetitivo. Dagger2 puede hacer completamente el trabajo de una nueva instancia. Por lo tanto, enfocamos nuestra energía principal en negocios clave y aumentamos la eficiencia del desarrollo.

Guarde el método de escribir un singleton y no tendrá que preocuparse por si el método singleton que escribe es seguro para subprocesos, si el singleton que escribe es el modo de hombre perezoso o el modo de hombre hambriento. Porque dagger2 puede realizar estas tareas.

Mejor instancia de clase de gestión

ApplicationComponent en cada aplicación administra las instancias de clase global de toda la aplicación, y ApplicationComponent administra todas las instancias de clase global, y su ciclo de vida es el mismo que el de la aplicación.

Cada página corresponde a su propio Componente, y el Componente de página gestiona todas las instancias de clase de las que depende su propia página.

Debido a Component, Module, la estructura de instancia de clase de toda la aplicación se vuelve muy clara.

Desacoplamiento

Si no se usa dagger2, es muy probable que el nuevo código de una clase se inunde en varias clases de la aplicación. Si el constructor de la clase cambia, entonces estas clases involucradas deben modificarse. El patrón de diseño aboga por encapsular las partes fácilmente cambiables .

Después de que usamos dagger2.

假如是通过用Inject注解标注的构造函数创建类实例,则即使构造函数变的天花乱坠,我们基本上都不需要修改任何代码。

假如是通过工厂模式Module创建类实例,Module其实就是把new类实例的代码封装起来,这样即使类的构造函数发生变化,只需要修改Module即可。

有个网友问过一个这样的问题,Module的构造函数也会发生变化,发生变化后,相应的new Module的类也发生变化,这就没有达到解耦的效果。首先解耦不是说让类之间或模块之间真的一点关系都没有了,解耦达到的目的是让一个类或一个模块对与自己有关联的类或模块的影响降到最低,不是说这种影响就完全没有了,这是不可能的。

解耦还有个好处,就是方便测试,若需要替换为网络测试类,只需要修改相应的Module即可。

项目中使用dagger2注意点

具体的代码就不讲了,dagger2 sample地址,大家自行下载。这里重点说下dagger2对目标类进行依赖注入的过程,现在假设要初始化目标类中的其中一个依赖类的实例,那具体步骤就在下面:

以上是dagger2进行的一次依赖注入的步骤,其实这个步骤是一个递归的过程,并且在查找类的实例的过程中Module的级别要高于Inject,这概念在上一篇讲过。

下面在说下注意的几点

  • 一个app必须要有一个Component(名字可以是ApplicationComponent)用来管理app的整个全局类实例
  • 多个页面可以共享一个Component
  • 不是说Component就一定要对应一个或多个Module,Component也可以不包含Module
  • 自定义Scope注解最好使用上,虽然不使用也是可以让项目运行起来的,但是加上好处多多。

总结

好了关于dagger2的所有的概念知识点到此终于结束了,希望能帮助大家,与大家共勉,有问题可以随时与我沟通。


Supongo que te gusta

Origin blog.csdn.net/kerwinJu/article/details/52832717
Recomendado
Clasificación