成都网站建设设计

将想法与焦点和您一起共享

Dagger2原理及使用-创新互联

小伙伴们,又到周一啦,收拾好心情,准备工作了吗?

专注于为中小企业提供成都网站建设、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业湘潭免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

今天跟大家一起来聊一聊Dagger2

Dagger2原理及使用

git地址:https://github.com/google/dagger

Dagger,起源于Square的Dagger,Dagger2是由谷歌接手开发;

它是一个完全在编译期间进行的依赖注入框架,完全去除了反射;

Dagger2通过依赖注入,让我们少写很多公式化代码,更容易测试,降低耦合,创建可复用可互换的模块;

说到依赖注入,很多小伙伴可能想到Bufferknife,那么他们之间的区别是什么呢?

Buffer knife目的为注入到view,所以能够在非activity里面注入,也能注入到inflate的views;

而Dagger能够注入到任何你想要的对象,只要其在module类中,或者它是构造器。但是缺少对方法和字段的注入支持;

Buffer knife只是避免样板代码,findViewById,仅此而已,所以不能算是一个真正的注入。只是一个view的代言。

Dagger2的优势:

1、全局对象实例的简单访问方式:

和ButterKnife 库定义了view,事件处理以及资源的引用一样,Dagger2 提供全局对象引用的简易访问方式。声明了单例的实例都可以使用@inject进行访问;

2、复杂的依赖关系只需要简单的配置

Dagger2 会通过依赖关系并且生成易懂易分析的代码。以前通过手写的大量模板代码中的对象引用将会由它给你创建并传递到相应对象中。因此你可以更多的关注模块中构建的内容而不是模块中的对象实例的创建顺序。

3、让单元测试和集成测试更加方便

因为依赖关系已经为我们独立出来,所以我们可以轻松的抽取出不同的模块进行测试。

4、作用域实例(Scoped instances)

我们不仅可以轻松的管理全局实例对象,也可以使用Dagger2中的scope定义不同的作用域

接下来,我们看看Dagger2的使用吧:

1、在app目录下的gradle文件中加入:
Dagger2原理及使用

2、创建类Test01:
Dagger2原理及使用

@Inject:注解标识,表明它需要提供依赖

3、新建Component标注的接口
Dagger2原理及使用

@Component:依赖注入的管理类,也是连接依赖(A类)与目标类(MainActivity类)的桥梁;

3、在以上两个步骤完成后,需要build一下工程,会自动生成接口的实现类,命名为DaggerXXX.class,其中XXX为你定义接口的名字:
Dagger2原理及使用

4、最后在MainActivity中使用:
Dagger2原理及使用

假如我们使用第三方库,不能修改源码,无法在构造方法中通过@Inject注解的方式提供依赖,这种情况下,我们该如何处理?

1、假如类名为Per的类为第三方库,不能修改源码
我们首先创建一个可以提供实例的类,类名如叫PerModule:
Dagger2原理及使用

@Module:通过此标注的类,可以另一种方式提供依赖

@Provide:通过此标注注解的方法,需要返回提供依赖的实例

2、把Module加入到Component中,即用@Component标注的接口中:
Dagger2原理及使用

3、在MainActivity中引用与上一种操作一致。

Dagger2确实达到了模块间的解耦,使用Dagger2可以将MVP中的V 层与P层进一步解耦,这样便可以提高代码的健壮性和可维护性;

Dagger2还有很多更加强大的用法......

不说了,我要去啃代码了;文中有误请留言指出,喜欢就动动手指关注我们哦!

Dagger2原理及使用

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:Dagger2原理及使用-创新互联
URL分享:http://chengdu.cdxwcx.cn/article/eoesg.html