开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情
说起这个dagger我就觉得头有点疼,从2021年的11月开始接触dagger,当时还不知道这个叫dagger,只是觉得这个代码让我完全看不懂,只知道@Inject的这个是注入,至于原来是个什么样子,完全不清楚,后来零星从网上找了点子类终于知道这个叫dagger,然后又出现了一个hilt,然后。。。再然后我就被绕进去了。看了几个讲解的视频觉得自己懂了,然后经常的不用又忘记了,每次要写和注解相关的代码,都是照猫画虎的来一遍运行起来就行。好巧不巧的,这几天又被我遇到了,而且我还要针对这个dagger的注解进行大改,折腾了我两天,终于算是有点眉目了,慢慢的了解了一些东西,把一些知识点列到这里当笔记吧。
dagger和dagger2的关系?
Dagger2 是 Dagger或者Dagger1的一个升级,它是静态的编译期的一个依赖注入。最先是由square公司开发的,现在是由google维护的。主要是用在java,kotlin以及android上。
dagger2和hilt的关系?
dagger2在android上面也是可以单独使用的,但是为了android的组件可以很好的方便的注入,所以引入了hilt作为dagger2在android平台上面的一个补充。在android上面在application的类里面加上@HiltAndroidApp就可以轻松的对四大组件进行注解使用了。
使用注解的好处?
有人可能对使用注解有些不解:
- 增加开发成本,需要一部分时间先学习dagger是怎么用的
- 代码可读性变差,找不到实例化的地方
- 如果使用不好,使代码更难维护了
上面的这就不解,是在我们项目里面维护了一段时间之后,出现的一些类似的疑问。总结起来其实就是代码没有使用好dagger,反倒对代码是有害的。但是如果把dagger用好了,会有什么好处呢?
- 代码解耦
- 代码更清晰
- 业务逻辑变的更简单了
- 方便单元测试和维护
所以说花一些时间学习dagger还是有用的。
dagger2上面几个关键字
- @Inject :这个有两个作用,第一个作用用来表示需要用注解获取的实例对象,第二个作用就是用来标注构造方法,表示那些类可以通过注解来构造。
- @Module:用来标注提供依赖对象的类,将需要注解的类根据不同的类型放到不同的module里面,可以是注解变的更清晰
- @Provider:用来标注Module类中提供依赖对象的方法进行标注。
- @Component:用来标注接口,将注入的提供方法接入到业务层,使注入可以生效。
- @Singleton:用来表示实例的生命周期,这个在项目中不一定是单实例,它只是在当前的scope内是一个单实例的,所以这个一定要注意。
今天就先讲一些概念吧。后面深入学习再讲^_^