*8*## 依赖注入框架 -> Dagger2
1,它是什么?
2,它的优势?
3,怎样使用它?
对象的依赖关系和生命周期都由它来帮我们管理
一个inject,它会按照依赖关系帮我们注入我们需要的对象,并且会管理好每个对象的生命周期,在生命周期还没结束的情况下,是不会重复new的,所以Dagger非常适合大项目。
@inject注解,用它告诉Dagger,类或者字段需要依赖注入,这样,Dagger就会构造这个类的实例,并满足他们的依赖
@Moudle注解 专门提供依赖
@Provide注解 在Moudle中我们定义的方法会用到这个注解
@Commponent 连接inject和Moudle的桥梁,我们用Commponent注解一个接口,然后列出所有的@Moudles组成该组件。
@Scope 限定注解作用域,定义范围的粒度
@Qualify注解 我们的context,有Activity的,有Fragment的,@ForActivity,@ForFragment这种注解方式表达我们想要的context
观点
Moulde其实就是一个简单的工厂模式,Moudle里面的方法基本都是创建类的实例的方法。第三方类库,我们可以这么管理:
@Moulde class Boss { //A是第三方类库的一个类 A provideA() { return A(); } }
Moudles中的各种创建类的实例的方法通过Provides注解与Inject注解标注的依赖产生关联。
Commponent搜索到目标类中用inject注解标注的属性后,Commponent会去Moudle中查找用provide标注的方法,第三方类库可以用Dagger2实现依赖注入。
类实例共享
一个Commponent是包含多个Commponent,这就像Acticity和Fragment的关系。
Component和Commponent之间有包含或者依赖关系。
因为Commponent和Moudle,整个app的类实例结构变得很简单。
依赖注入是面向对象编程的一种设计模式,其目的的降低程序之间的耦合,这个耦合就是类之间的依赖引起的。
Dagger2有别于其他依赖注入框架,它是通过APT插件在编译阶段生成相应的注入代码。