依赖注入框架Dagger2从入门到放弃
2017-08-16 14:17
375 查看
现在Dagger2在项目里用的越来越多了,最近花了些时间学习了一下Dagger2,这篇文章主要帮助理解Dagger2的注入实现过程,如有错误,还请指正! 我是看着这位哥们的教程入门的
依赖注入是面向对象编程的一种设计模式,其目的是为了降低程序耦合,这个耦合就是类之间的依赖引起的。
举个例子:我们在写面向对象程序时,往往会用到组合,即在一个类中引用另一个类,从而可以调用引用的类的方法完成某些功能,就像下面这样.
这个时候就产生了依赖问题,ClassA依赖于ClassB,必须借助ClassB的方法,才能完成一些功能。这样看好像并没有什么问题,但是我们在ClassA的构造方法里面直接创建了ClassB的实例,问题就出现在这,在ClassA里直接创建ClassB实例,违背了单一职责原则,ClassB实例的创建不应由ClassA来完成;其次耦合度增加,扩展性差,如果我们想在实例化ClassB的时候传入参数,那么不得不改动ClassA的构造方法,不符合开闭原则。
因此我们需要一种注入方式,将依赖注入到宿主类(或者叫目标类)中,从而解决上面所述的问题。依赖注入有一下几种方式:
通过接口注入
通过set方法注入
通过构造方法注入
通过Java注解
在Dagger2中用的就是最后一种注入方式,通过注解的方式,将依赖注入到宿主类中。
添加依赖(在build.gradle(Module:app)中添加如下代码)
什么是Dagger2
Dagger2是Dagger的升级版,是一个依赖注入框架,现在由Google接手维护。 恩,这里有个关键字依赖注入,因此我们得先知道什么是依赖注入,才能更好的理解Dagger2。依赖注入是面向对象编程的一种设计模式,其目的是为了降低程序耦合,这个耦合就是类之间的依赖引起的。
举个例子:我们在写面向对象程序时,往往会用到组合,即在一个类中引用另一个类,从而可以调用引用的类的方法完成某些功能,就像下面这样.
public class ClassA { ... ClassB b; ... public ClassA() { b = new ClassB(); } public void do() { ... b.doSomething(); ... } }
这个时候就产生了依赖问题,ClassA依赖于ClassB,必须借助ClassB的方法,才能完成一些功能。这样看好像并没有什么问题,但是我们在ClassA的构造方法里面直接创建了ClassB的实例,问题就出现在这,在ClassA里直接创建ClassB实例,违背了单一职责原则,ClassB实例的创建不应由ClassA来完成;其次耦合度增加,扩展性差,如果我们想在实例化ClassB的时候传入参数,那么不得不改动ClassA的构造方法,不符合开闭原则。
因此我们需要一种注入方式,将依赖注入到宿主类(或者叫目标类)中,从而解决上面所述的问题。依赖注入有一下几种方式:
通过接口注入
interface ClassBInterface { void setB(ClassB b); } public class ClassA implements ClassBInterface { ClassB classB; @override void setB(ClassB b) { classB = 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; }
通过Java注解
public class ClassA { //此时并不会完成注入,还需要依赖注入框架的支持,如RoboGuice,Dagger2 @inject ClassB classB; ... public ClassA() {}
在Dagger2中用的就是最后一种注入方式,通过注解的方式,将依赖注入到宿主类中。
如何引入Dagger2
配置apt插件(在build.gradle(Project:xxx)中添加如下代码)dependencies { classpath 'com.android.tools.build:gradle:2.1.0' //添加apt插件 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' }
添加依赖(在build.gradle(Module:app)中添加如下代码)
apply plugin: 'com.android.application' //添加如下代码,应用apt插件 apply plugin: 'com.neenbedankt.android-apt' ... dependencies { ... compile 'com.google.dagger:dagger:2.4' apt 'com.google.dagger:dagger-compiler:2.4' //java注解 compile 'org.glassfish:javax.annotation:10.0-b28' ... }
相关文章推荐
- 关于Android依赖注入框架ButterKnife和Dagger的简单比较
- Android Dagger依赖注入框架浅析
- 框架 day36 Spring3 入门,DI依赖注入,装配bean基于xml/注解, 整合Junit4,配置约束自动提示
- Android:dagger2让你爱不释手-基础依赖注入框架篇
- Dagger——Android上的依赖注入框架
- dagger2依赖注入框架源码解析
- Android 依赖注入框架 Dagger2使用
- 依赖注入框架Dagger2
- 安卓开发 第一篇 关于依赖注入框架dagger2的使用和理解
- Dagger——Android的依赖注入框架
- android依赖注入框架Dagger和Butterknife实战
- Android快速依赖注入框架Dagger2使用1
- Dagger2依赖注入框架
- Android——Dagger2依赖注入框架
- 浅谈Dagger2依赖注入框架
- Android:dagger2让你爱不释手-基础依赖注入框架篇
- Android:dagger2让你爱不释手-基础依赖注入框架篇
- 第一篇 关于依赖注入框架dagger2的使用和理解
- 从使用到深入理解 依赖注入框架-Dagger2
- Android:dagger2让你爱不释手-基础依赖注入框架篇