A fast dependency injector for Android and Java.
Dagger
是一个依赖注入(Dependency Injection
,简称DI
)框架,butterknife
也是一个依赖注入框架。但是Dagger2
比Butterknife
更强大的多,它的主要作用,就是对象的管理,其目的是为了降低程序耦合。
有关注解和ButterKnife
的解析请看之前的文章:注解使用及ButterKnife源码解析
那么神马是依赖注入,其实我们一直在用:
-
通过接口注入
interface Ib { void setB(B b) } public class A implements Ib { B b; @override void setB(B b) { this.b = b; } }
-
通过
set
方法注入public class ClassA { ClassB classB; public void setClassB(ClassB b) { classB = b; } }
-
通过构造方法注入
public class ClassA {
ClassB classB;
public void ClassA(ClassB b) {
classB = b;
}
}
-
通过注解的方式注入
public class ClassA { //此时并不会完成注入, //还需要依赖注入框架的支持,如Dagger2 @inject ClassB classB; public ClassA() {} }
说了这么久,也不知道到底这货有什么用,这里举个例子,比如有个类A
,他的构造函数需要传入B,C
;然后代码里有10个地方实例化了A
,那如果功能更改,A
的构造函数改成了只有B
,这个时候,你是不是要去这10个地方一个一个的改?如果是100个地方,你是不是要吐血?!如果采用dagger2
,这样的需求只需要改1-2个地方。这是真的吗?听起来好像挺牛逼的样子。
也有人怀疑Dagger2
利用注解是不是采用了反射,会影响性能,这个问题其实在之前的文章ButterKnife源码解析就已经介绍过了。Dagger2
、ButterKnife
这类依赖注入框架都已经采用了apt
代码自动生成技术,其注解是停留在编译时,可以不用考虑性能的问题。
- 邮箱 :[email protected]
- Good Luck!