写作背景 这几天在学习Dagger、MVP、Agera,这里所说的Dagger即Google接手的Dagger,也被称作Dagger 2。 Hello Dagger 环境配置 我比较喜欢从功能入手来了解一个框架,所以让我们从Hello Dagger开始吧。 ? :dagger-compiler:2.2' compile 'com.google.dagger:dagger:2.2' provided 'javax.annotation:jsr250-api:1.0 ' 这样,Dagger的环境便配置好了,下面让我们来开心地实现Hello Dagger. 代码实现 官方的例子有点复杂,我表示看起来很吃力,所以,这里我们实现一个最简单的Dagger demo就好了: 点击按钮,获取Dagger注解的一个String,并显示Toast。
1.什么是Dagger2 Dagger中文意思是匕首,Dagger2是Dagger的第二个版本,之前的Dagger已经放弃维护了,Dagger2用官方的话来说就是: ? :dagger:2.x' annotationProcessor 'com.google.dagger:dagger-compiler:2.x' } If you're using classes in dagger.android you'll also want to include: compile 'com.google.dagger:dagger-android:2.x' compile 'com.google.dagger:dagger-android-processor:2.x' If you're using classes in dagger.android you'll 2.2 引入依赖: //Dagger2相关依赖 implementation 'com.google.dagger:dagger:2.24' annotationProcessor 'com.google.dagger
这次入门就不要放弃了 作者:HuYounger 博客:http://rkhcy.github.io/ 文章目录 概述 Why 学习资料 0 概述 最近公司的项目是用mvp+dagger2搭的框架,由于之前没接触过 dagger2,改bug和做需求总是一脸懵逼,看了些文档介绍,和大多数学习者一样从Dependency Injection、注解概念等等开始了解,然后敲代码上手,在此记录下学习心得。 ,而不用dagger2只要new一次就可以了(如下图),但是两者最终都是一条依赖链 ? 总结 整个流程: ? 因此如果两种同时存在,会选择@Module、@Providers,而另一种只是个“备胎”… 2 学习资料 当然dagger2还有很多很强大的功能,待续 github dagger介绍(https://github.com /codepath/android_guides/wiki/Dependency-Injection-with-Dagger-2) dagger官网(https://google.github.io/dagger
嗨,我是哈利迪~《看完不忘系列》之dagger(树干篇)一文对dagger做了初步介绍,下面我们一起来瞅瞅dagger的一些细节。 本文约3.5k字,阅读大约9分钟。 Dagger源码基于最新版本2.28.3 目录: ? 根据声明就知道如何提供实例了,dagger不会调用这个方法或为他生成具体实现。 那么SPI对dagger来说有啥用途呢? 注意:dagger的SPI还是实验性的,随时可变 我们看到dagger的spi包下的一个接口BindingGraphPlugin, //我是一个插件接口,可以插在dagger图绑定(创建类连接依赖关系)
Dagger也是一个IOC框架,对于大型项目,我们有必要去学习使用它 一、构造函数注入 dagger拥有两种方式注入对象,一种是利用@Inject注解构造函数 1.gradle中导入dagger依赖 在 implementation "com.google.dagger:dagger:2.40.4" kapt "com.google.dagger:dagger-compiler:2.40.4" RemoteDataSource, var localDataSource: LocalDataSource ) 3.使用@Component注解一个接口,表示一个注入中间件 对于需要注入的对象,dagger 同一个Component实例在注入对象时,一旦发现注入方式使用了作用域,那么它们注入的对象将会是同一份实例 1.使用@Singleton注解实现注入相同实例 @Singleton注解为dagger默认提供的一个作用域注解 的结构图: Demo地址:https://gitee.com/aruba/dagger-application.git
Guice比较成熟,Dagger2主要用于Android。虽然都是google维护的,但Dagger2远比guice更新的频率高。 再一个是,Dagger2不同于guice的运行时注入,编译时生成代码的做法很好。提前发现问题,更高的效率。 还是那句话,百度到的dagger2资料看着一大堆,大都表层,而且和Android集成很深。 :dagger:2.12' apt 'com.google.dagger:dagger-compiler:2.12' testCompile group: 'junit', name: 以下来自详解Dagger2 @Inject: 通常在需要依赖的地方使用这个注解。换句话说,你用它告诉Dagger这个类或者字段需要依赖注入。 由于Heater声明了Singleton,Dagger通过经典的double-check来实现单例。面试必备。来看看dagger是怎么用的。
Dagger 是一个用于 Android 应用程序的依赖注入(Dependency Injection, DI)框架。它通过使用代码生成来实现依赖的注入,具有高效的性能和编译时验证的优点。 Dagger 的核心目标是帮助开发者管理对象的创建和依赖,简化代码结构,提高代码的可测试性和可维护性。 Dagger 的基本概念 Module(模块): 使用 @Module 注解来标记类,该类提供依赖的对象。 @Provides 注解的方法用于告知 Dagger 如何创建某个类的实例。 Module 定义: import dagger.Module; import dagger.Provides; import javax.inject.Singleton; @Module public Dagger 在编译时生成实现,使得应用程序的依赖关系在编译期得以确保,避免运行时出现错误。此外,由于它在生成代码时是静态的,这意味着可以在生成的代码中进行优化,结果往往比反射实现更高效。
参考 Android_Dagger2篇——从小白最易上手的角度 + 最新dagger.android 都是套路——Dagger2没有想象的那么难 一、无module方式,无参构造 (最简单
Dagger2简介: Dagger2是Dagger1的分支,由谷歌公司接手开发,目前的版本是2.0。Dagger2是受到AutoValue项目的启发。 使用 Dagger2 创建依赖对象,我们就不用手动初始化了。 Dagger2注解解释: 接下来介绍Dagger2中的每一个概念: @Inject: 通常在需要依赖的地方使用这个注解。换句话说,你用它告诉Dagger这个类或者字段需要依赖注入。 这样,Dagger就会构造一个这个类的实例并满足他们的依赖。 :dagger-compiler:2.0' compile 'com.google.dagger:dagger:2.0' ... } 我们添加了编译和运行库,还有必不可少的apt插件,没有这插件
经过一段时间的纠结和水深火热,终于渐渐领悟了Dagger2,在此分享一下学习心得,希望同样对Dagger2水深火热的你们有点帮助。 接下来会分享一系列Dagger2内容。 Dagger2中常用的注解名词以及含义 - @Component :用于注解一个interface, 比如: @Singleton @Component(modules = {AppModule.class 编译代码:Dagger2会自动生成一个叫DaggerAppComponent的类,该类会根据@Component(modules = {AppModule.class, RetrofitModule.class - @Singleton:单例-Dagger2帮我们实现的一个@Scope作用域。 } @Inject//当构造函数被执行之后,立马执行改方法 public void setPresenter(){ xxx; } } -最关键的是执行编译之后 Dagger2
的依赖 //dagger2 apt 'com.google.dagger:dagger-compiler:2.0.2' //指定注解处理器 compile 'com.google.dagger: dagger:2.0.2' //dagger公用api provided 'org.glassfish:javax.annotation:10.0-b28' //添加android缺失的部分javax //指定注解处理器 apt 'com.google.dagger:dagger-compiler:2.0.2' //dagger公用api compile 'com.google.dagger:dagger 这样,Dagger就会构造一个这个类的实例并满足他们的依赖。 好了,到这里Dagger2基本就讲完了,下一篇可能会写个小例子给大家看看。 毕竟我是刚刚开始用Dagger2,所以如果哪里写的有问题,欢迎大家前来批评指正,我会进行修改。
,那么在这一章中,我们将逐渐入门Dagger2。 Dagger2依赖注入 下面让我们一步一步走下去: 1 在modle的build.gradle文件中添加 annotationProcessor 'com.google.dagger:dagger-compiler :2.0.2' compile 'com.google.dagger:dagger:2.0.2' provided 'org.glassfish:javax.annotation:10.0-b28 但是Dagger2为了解耦,提供了一个中介,@Component注解,也就是我们的第4步。 这章主要是入门了Dagger2,下面我们会了解 1 为什么要使用Dagger2来替代文章一开头的写法? 2 如果@Inject注解的构造器有多个怎么办? 3 如果存在依赖链怎么办呢?
今天分享一下Android开发中的一个利器 Dagger2 请跟着小编一步一步来了解它吧~~ 导入 Dagger2 依赖 网上不少资源说要在Project和module下的build.gradle分别添加以下依赖 正确方式是直接在module下添加如下依赖就行,不需要增加插件什么的 annotationProcessor 'com.google.dagger:dagger-compiler:' + rootProject.dagger2 以上正确配置之后,就可以在代码里使用Dagger2了 参考链接: Google官方文档 https://google.github.io/dagger Google官方MVP+Dagger2架构详解 http://www.jianshu.com/p/01d3c014b0b1 Android常用开源工具(1)-Dagger2入门 http://blog.csdn.net/duo2005duo/article
使用Dagger编写Android应用程序的一个主要困难是,许多Android框架类都由操作系统本身实例化,如Activity和Fragment,但如果Dagger可以创建所有注入的对象,则效果最佳。 dagger.android中的类提供了一种简化此模式的方法。 支持库 对于Android支持库的用户,dagger.android.support 包中存在相同类型。 集成方式如下: dependencies { compile 'com.google.dagger:dagger-android:2.x' compile 'com.google.dagger :dagger-android-support:2.x' // if you use the support libraries annotationProcessor 'com.google.dagger
对于刚刚入门Dagger的同学们来讲,这样的文章只会让你觉得生无可恋,看完之后还是不知道怎么使用? 对于新的知识,我们首先要知道的是它是做什么的?能达到什么效果? 首先,如果想要学好dagger,就必须要了解什么是“依赖注入”,因为dagger2是实现依赖注入的一个框架。 之类的apt框架,都有相似之处,学起来刷刷的; 从这系列文章中,你不但能够学到Dagger相关的编程知识,还能学习到程序员最核心的竞争力,学习力。 那么,我们的Dagger2能给我们带来什么呢?能达到什么效果呢?为什么要使用Dagger2呢?这一大堆问题我们将需要一个一个突破,弄懂一个问题之后,再进行下一个问题,不然,讲完之后,会让你云里雾里。 待我们学完之后,再回过头来回答为什么要使用Dagger2?和前面的注入方式相比,有什么好处? 下面的我们将通过demo代码形式来使用Dagger2,因为我们都是程序员,代码胜过千言万语~~
注意,控制反转不等同于依赖注入,控制反转还有一种实现方式叫“依赖查找” Dagger2 Dagger2的作用目的:提供对象实例 1、使用@Inject标注构造函数来提供依赖的对象实例的方法 @Inject dagger2.png 2、用@Provides标注的方法来提供依赖实例,方法的返回值就是依赖的对象实例,@Provides方法必须在Module中,Module 即用@Module标注的类 Module FriendComponent 的 Scope 不能是 @Singleton,因为 Dagger 2 中 @Singleton 的 Component 不能依赖其他的 Component。 8、@BindsInstance 用于再创建Component的时候绑定依赖实例,用以注入 总结: 1、Dagger2 依赖注入,目的就是提供对象,在dagger2提供对象有两种方式@Inject
为什么是 Dagger Dagger 是 Android 开发的首选依赖注入库,Google 正积极参与它的开发。 如果您还没开始使用 Dagger,或者希望了解更多有关它的信息,请查阅以下资料:官方指南、 Codelab 实战教程 以及我们近期发布的关于在 最新 Android Studio 中使用 Dagger 在本篇文章中,让我们看一看如何使用 Dagger 注入这些参数。 使用 Dagger 将参数注入到 WorkerFactory 如果您当前已经在使用 Dagger 来管理依赖,那么首先需要将 Dagger 集成到您的 WorkerFactory 中。 能够注入这个值,我们必须把它放进 Dagger 的图中。
我们可以适当地复用Component接口,从而使逻辑更加简洁且减少不必要的重复工作,复用一般使用dependencies或者@Subcomponent,这两者比较相似,要注意区分,先看实现再总结吧:
Dagger2 使用总结(三) 之前两篇主要针对Dagger2的基础库进行了简单的总结,本篇会重点讲述Dagger2的Android支持库,它对Android组件进行了定制,使代码更加简洁。 DaggerApplication来源于支持库且有两个: dagger.android.DaggerApplication:支持普通组件,不支持扩展(v4,v7)组件dagger.android.supportDaggerApplication :支持扩展组件,不支持普通组件 如果项目中需要支持两种类型的组件,可以采用上述代码中的形式,即: 继承dagger.android.DaggerApplication并实现HasSupportFragmentInjector 相比于普通的Dagger2使用,我们省略了以下步骤: ? ? ? @Binds 类似于@Provides,在使用接口声明时使用,区别是@Binds用于修饰抽象类中的抽象方法的,看下实例吧。
Dagger2 是一个Android依赖注入框架。 我们初步来看,会发现Dagger2优势不大,没什么吸引人的,那么请你静下心来,看完再得出结论。 test3 = new Test3(); } } 如果我们改为使用Dagger2的方式的话,则可以写成如下方式: 1 创建一个类 使用了注解方式,使得Dagger2能找到它。 我先说下Dagger2的注释思路:关键的点是@Component,这个是个连接器,用来连接提供方和使用方的,所以它是桥梁。 这里稍安勿躁,先来看相同效果的另一个注释,@Name,这个是Dagger2自带的一个让区分,效果如下: ? ? ? ?