02. Explicación de clasificación de anotaciones - Inyectar parte.
Este artículo explicará el uso avanzado de Dagger2 a través de la clasificación de anotaciones.
Con respecto a las anotaciones de Dagger, simplemente divídalas en tres categorías:
Para corresponder a las tres partes de la inyección de dependencia de Dagger, comencemos con la parte de inyección de Inject.
@Inject se utiliza para anotar constructores o variables miembro.
Al actuar sobre variables miembro:
Dagger2 obtiene la instancia correspondiente de Moudle en función de la anotación y el tipo de la variable miembro, o en función del constructor sin parámetros anotado con la clase @Inject. , obtenga una instancia de esta clase.
Nota: El modificador de acceso de las variables miembro no puede ser privado
Cuando actúa sobre un constructor:
Generalmente es un constructor general sin parámetros, que puede ser utilizado directamente en La inyección en otras clases se realiza mediante inyección de dependencia.
Escenarios donde @Inject no es aplicable:
(Estos problemas se pueden manejar usando @Provides)
Podemos inyectar instancias a través de la anotación @Inject, pero Al inyectar Durante el proceso, por ejemplo, la misma clase puede parecer instancias diferentes. ¿Qué debemos hacer en este momento?
Dagger2 proporciona la anotación @Named para distinguir la creación de diferentes objetos de instancia.
Utilice la anotación @Named para definir dos instancias diferentes:
Definir componente:
Llamar a dos objetos diferentes en Actividad:
Resultados de la prueba :
Se puede ver que los dos objetos que introdujimos son de hecho dos objetos diferentes.
La anotación @Qualifier se utiliza para distinguir dos métodos diferentes de crear instancias en la misma latitud. ¿Qué es la misma latitud?
Por ejemplo, si proporcionamos dos métodos diferentes para crear instancias en el Módulo, pero las instancias creadas son las mismas, ¿qué debemos hacer en este momento? Esto se puede lograr creando dos anotaciones diferentes a través de la anotación @Qualifier:
Los objetos proporcionados en estos dos métodos de povider son Alimentos, pero los métodos de creación son diferentes. En este caso, Dagger no sabe qué. a utilizar Qué objeto se crea.
Entonces crearemos dos nuevas anotaciones a través de @Qualifier:
Luego modificaremos el método que proporcionamos para la inyección de dependencia:
Obtenga el objeto en Actividad:
Imprima los resultados:
Aquellos que tengan cuidado encontrarán que la anotación @Qualifier es en realidad muy similar a la anotación @Named. La implementación interna de @Named se realiza a través de la anotación @Qualifier, por lo que. generalmente pasamos La anotación @Named puede lograr las operaciones anteriores. El propósito de comprender @Qualifier es usarlo al personalizar las anotaciones.
Echemos un vistazo al código fuente de @Named:
Ahora que ha aclarado la relación entre ellos, revisemos los módulos de uso común antes de explicar la parte del componente. por parte.