Dagger2概念介绍
为什么需要依赖注入?
基于控制反转概念的依赖注入。这说明一个类应该从外部获得它的依赖。简单来说,没有类应该实例化另一个类,但应该从配置类中获取实例。
列如java类通过new运算符创建另一个类的实例,则它不能独立该类使用和测试,即硬依赖。
从类外部提供依赖有什么好处呢?
增加了重用类的可能性,且能独立于其它类测试它们。
如何实现DI(依赖注入)?
一个名为依赖容器的框架类用于分析类的依赖关系。通过此分析,它能够创建类的实例,并通过Java Reflections将对象注入定义的依赖项中。这消除了硬依赖性。这样,这个项目可以单独测试。
需要注意的是,Reflection是很慢的,其次,它用于在运行时执行依赖项解析容易意外崩溃。
于是Dagger2就是为了解决这一问题……
Dagger 2带来的巨大变化是使用注释处理器生成依赖图。现在使用javax inject包在构建时生成提供依赖项的类。这有助于在应用程序运行之前进行可能的错误检查。生成的代码具有高可读性,就像手写一样。
注释构建器是一种在构建期间读取已编译文件以生成要在项目中使用的源代码文件的方法。
依赖性使用者通过连接器向依赖性提供者请求依赖性(Object)。
- 依赖提供程序:带有注释的类@Module负责提供可以注入的对象。这些类定义了注释的方法@Provides。这些方法返回的对象可用于依赖注入。
- 依赖消费:该@Inject注解用于定义的依赖。
- 连接消费者和生产者:@Component注释的接口定义对象(模块)和表达的依赖关系的对象的提供者之间的连接。此连接的类由Dagger生成。
Dagger的不足
- Dagger不会自动注入字段。
- 不能注入私有字段。
- 使用字段注入,必须在带@Component注释的接口中定义一个方法,该方法接受要注入成员变量的类的实例。