首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

「android」摆正姿势,dagger2,从精通到上瘾

在学习使用dagger2过程,我遇到了以下一些困惑: dagger2Inject,Component,Module,Provides等等都是什么东东,有什么作用?...具体学习dagger2时候,看了好多博客,看时候感觉挺简单,但是真正使用到项目中时候,脑袋就懵了,无从下手,Component应该怎么用,能放些什么方法? Module应该放些啥内容?...所以也许会有正在学习或即将要使用dagger2同学使用过程遇到和我一样困惑,因此我决定把我对dagger2理解、使用经验分享给大家,希望能对大家有帮助。 我会分几节给讲解dagger2。...Provides最终解决第三方库依赖注入问题 Module创建实例方法用Provides进行标注,Component搜索到目标中用Inject注解标注属性后,Component就会去Module...中去查找Provides标注对应创建实例方法,这样就可以解决第三方库用dagger2实现依赖注入了。

96230

Andriod-Dagger2

翻译成中文就是: Dagger2是Java和Android快速依赖注入器,是依赖注入编译时框架。它不使用反射或运行时字节码生成,在编译时进行所有分析,生成纯Java源代码。...:dagger-android-processor:2.24' 3.基本使用 Dagger主要是以下几个注入标签,我们来一一说明: @Inject 简介:如果在上添加此依赖注入,Dagger 就会构造一个这个实例满足他们依赖...第一步: 首先我们要先创建一个Module,我们上面说了Module 里面的方法专门提供返回对象依赖,所以我们定义一个,用@Module 注解,这样 Dagger 构造实例时候,就知道从哪里去找到需要依赖...,一个是Module里提供依赖,规则是这样查找Module是否存在创建该类方法,如果没有则查找Inject注解构造函数 4.高级使用 说完了基本使用,我们来看看Dagger2高级使用注解...面向对象思想,我们碰到这种情况一般都要抽取父,Dagger2也是用这种思想,我们先创建一个BaseModule,用来提供工具: @Module public class BaseModule

2.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

Android | dagger细枝篇

@Binds和@Provides区别 Binds和Provides都是搭配Module(模块,用于支持模块化)使用,Binds表示抽象和具体绑定,作用在抽象方法上,如下, @Module abstract...,Provides用于直接提供实例,他们都写在可模块化Module里。...Interface,服务提供者接口)简单来说,就是先统一接口,然后按需扩展自己实现,到了运行时候再去查找加载对应实现,不过这里实现,我们集中放在一个事先约定好地方。...过程 public interface BindingGraphPlugin { //为Dagger处理器遇到每个有效根绑定图调用一次。...就会使用java自带ServiceLoader进行查找和加载,SpiModule, @Module abstract class SpiModule { private SpiModule

71310

快刀斩乱码—— Dagger2没有想象那么难

这篇文章并不是讲解Dagger2基础使用,而是通过讲解它使用以及套路,帮助大家更好理解如何高效使用Dagger2,相信大家看完,一定会对Dagger2理解更加深刻!...步骤如下: 查找Module是否存在创建该类型方法(前提是@Conponent标记接口中包含了@Module标记Module,如果没有则直接找@Inject对应构造方法) 若存在方法,查看该方法是否有参数...若存在参数,则从步骤1开始初始化每个参数 若不存在创建方法,则查找该类型中有@Inject标记构造方法,查看构造方法是否有参数 若构造方法无参数,则直接初始化该类实例,一次依赖注入到此结束。...Context context(); } 想要其它依赖这个AppComponentComponent使用使用全局Appliation Context,我们必须显式地暴露出去。...由于@Inject,@Module和@Provides注解是分别验证,所有绑定关系有效性是@Component层级验证。

1K20

一个 android 框架

熟悉 dagger2小伙伴可能已经明白了 复习 dagger dagger 创建实例有2个维度可以创建 步骤1:查找Module是否存在创建该类方法。...,则查找Inject注解构造函数,看构造函数是否存在参数 步骤3.1:若存在参数,则从步骤1开始依次初始化每个参数 步骤3.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束 因为使用第三方代码时...,我们无法修改源码构造方法,所以使用 Module 来提供注入构造 所以再回来看DataManager构造方法 @Inject public DataManager(RibotsService...找不到对应 provide 方法,变会在构造方法寻找,递归找参数注入… 以下用一张图来概括 ?...更为简洁明了 也可以看我这一篇实践 同样 P V 直接也可以使用 dagger 解耦。

80680

初学Dagger之Hello Dagger(0)

跟着demo与一些技术博客学习,发现对于一个未曾使用过类似框架的人来说上手很困难,因此撰 初学Dagger 系列学习笔记,以一名初学者视角来分享自己学习经验,希望让大家上手更顺利。...:android-apt:1.8' build.gradle(Module: app)文件中最外层上方添加 apply plugin: 'com.neenbedankt.android-apt' 继续该文件内...} @Provides @Named("hi") String provideHi() { return "hi dagger"; } } @Module : 依赖提供者,通俗说就是该类负责提供数据内容...; @Provides : 负责提供值,被注解方法提供返回参数类型数据,如果同一个module多个provides返回参数类型一致,那么必须加@Named("xxx")以进行区分,其实xxx才是该...@Inject :需要注入依赖地方,Dagger 会构造一个该类实例满足它所需要依赖,通俗地说就是该变量被初始化为AppModule@Provides且同类型同名(@Named相同)方法返回值了

41720

使用dropwizard(3)-加入DI-dagger2

前言 习惯了Spring全家桶,对spring容器爱不释手。使用dropwizard,看起来确实很轻,然而,真正使用时候不得不面临一个问题。...于是,想到提取工具,算了,不如用Dagger好了。 什么是Dagger Dagger是Java里开源DI框架中最火之一,主要用在Android领域,很多特性也多针对Android开发。...; import dagger.Module; import dagger.Provides; import javax.inject.Singleton; /** * Created by Ryan...防止IDEA不认识dagger自动生成dagger自动生成位于target/generated-sources/annotations. 点击刷新按钮,刷新下maven依赖。...以后就可以需要注入构造器上声明@Inject, 或者module里@Provide,就可以实现构造解耦。测试不要太方便.

83270

上手指南 | Jetpack Hilt 依赖注入框架

这些组件会自动集成到 Android 程序生命周期中。使用时候可以指定使用范围,事情作用在对应生命周期当中。...使用 @Module 注解,需要使用 @InstallIn 注解指定 module 范围 增加了 @Module 注解,其实代表就是一个模块,通过指定组件来告诉在那个容器可以使用绑定安装...Hilt 组件(Compenent) 使用 @Module 注解,需要使用 @Installin 注解来指定 module 范围。...查找了一些资料: 主要问题之一是,通过 Hilt 中发现模块方式,无法区分哪些模块属于应用组件(如果他们确实使用过 Hilt) 已经库或其他库组件 另一个问题是,他将预先构建组件层次结构变得复杂和混乱...同样,如果一个仅包含片段库托管应用程序活动,那可能会遇到类似的情况,您希望库片段是独立,单让 FragmentComponent 对象作为 ActivityComponent 并没有意义。

1.6K20

Dagger2-从入门到精通(上)

换句话说,你用它告诉Dagger这个或者字段需要依赖注入。这样,Dagger就会构造一个这个实例满足他们依赖。...@Module: Modules里面的方法专门提供依赖,所以我们定义一个,用@Module注解,这样Dagger构造实例时候,就知道从哪里去找到需要 依赖。...modules一个重要特征是它们设计为分区组合在一起(比如说,我们app可以有多个组成在一起modules) @Provide: modules,我们定义方法是用这个注解,以此来告诉Dagger...dagger-compiler为编译时期生成代码等相关库。 android-apt文档,也推荐使用这种方式。...; } } @Module: Modules里面的方法专门提供依赖,所以我们定义一个,用@Module注解,这样Dagger构造实例时候,就知道从哪里去找到需要依赖。

1.1K10

Dagger2从懵懂到精通,在线学习那点事儿

public ClassA() {} Dagger2就是最后一种注入方式,通过注解方式,将依赖注入到宿主。...我们MainModule里声明了MainContract.View成员属性,构造方法里将外界传进来view赋值给mView,通过一个@Provides标注以provide开头方法,将这个view...我们来重新理一遍上面的注入过程,首先弄清楚以下几个概念: @Inject 带有此注解属性或构造方法将参与到依赖注入Dagger2会实例化有此注解 @Module 带有此注解,用来提供依赖,...里面定义一些用@Provides注解以provide开头方法,这些方法就是所提供依赖,Dagger2会在该类寻找实例化某个所需要依赖。...(module); } } 看到上面的名,我们发现了一种对应关系,MainModule定义@Provides修饰方法会对应生成一个工厂,这里是MainModule_ProvideMainViewFactory

63000

上手指南 | Jetpack Hilt 依赖注入框架

这些组件会自动集成到 Android 程序生命周期中。使用时候可以指定使用范围,事情作用在对应生命周期当中。...使用 @Module 注解,需要使用 @InstallIn 注解指定 module 范围 增加了 @Module 注解,其实代表就是一个模块,通过指定组件来告诉在那个容器可以使用绑定安装...---- Hilt 组件(Compenent) 使用 @Module 注解,需要使用 @Installin 注解来指定 module 范围。...查找了一些资料: 主要问题之一是,通过 Hilt 中发现模块方式,无法区分哪些模块属于应用组件(如果他们确实使用过 Hilt) 已经库或其他库组件 另一个问题是,他将预先构建组件层次结构变得复杂和混乱...同样,如果一个仅包含片段库托管应用程序活动,那可能会遇到类似的情况,您希望库片段是独立,单让 FragmentComponent 对象作为 ActivityComponent 并没有意义。

1.6K30

Dagger2 使用总结(一)

使用Dagger2库,重点是了解其中各种注解熟练使用,下面看一下具体用例。...创建Fruit和Apple Fruit抽象: ? Apple: ? ? 创建Module ? ? MainActivity中注入对象 ? ?...如果遇到注入构造器不方便编辑时(比如来自三方库,抽象,接口), 则可以使用@Module和@Provides注解,将对像获得由构造器获得转变为由方法返回,使对象创建形式更加可控。...@Named注解 上述@Module和@Provides注解仅能返回一个继承了Fruit对象, 如果再加入一个Banana,继承Fruit并在MainActivity中注入, 这时候就需要使用@Named...小结 @Named注解使用比较简单,只要将Module标注和目标声明注入标注一一对应即可。

1K10

Kotlin 中使用 Dagger 会遇到陷阱和优化方法

本文写作灵感来自 Dagger issue 一些建议,这些建议直接代表了 Kotlin 中使用 Dagger 最佳实践和一些痛点。在此要感谢所有的 issue 贡献者。... Dagger v2.24 版本这个功能是默认启用。如果您使用是较低版本,您需要添加以下几行代码来激活该功能。 另外,您可以配置 Dagger 让它不要格式化生成代码。... Dagger v2.25 版本已经修复该问题了,如果您使用是该版本,之前这样写法会出现问题,现在不会了。...增加 @Module 注解。...().build() } } Dagger v2.25 版本,您不再需要使用 @JvmStatic 来标记 @Provides 函数了,Dagger 会正确地识别它。

1K30

Dagger2使用攻略-基础部分

在这篇文章,我会介绍 什么是依赖注入,Dagger2是什么,解决什么问题以及基础注解使用 ? 依赖注入 什么是 依赖。...创建一个接口,定义一个方法,定义要往哪里注入;在编译时期 Dagger2 就会自动生成这个接口实现 并以 Dagger 开头。...这个时候可以创建一个 专门用来提供这些依赖,使用 @Module 注解,然后 Component 属性 modules 引用上就可以使用了。...() @Provides String com.skymxc.example.dagger2.di.module.ThirdModule.provideName() 简单解决方法就是 属性和提供依赖上...举个例子,我要 DBManager 全局单例,需要以下几个步骤 DBManger 上使用 @Singleton 或者 @Provides 修饰方法上加。

1.8K40

Jetpack Hilt 依赖注入框架上手指南

,并在运行时注入到对应字段,就是依赖注入,目的是为了解耦 例子:A 中用到了 B ,一般情况下需要在 A new B() 实例对象 采用依赖注入后, A 定义一个私有的 B...并在运行时候通过从相关容器获取出来 B 对象注入到 A 字段。 这样做好处是什么? 如果有很多个需要使用 B 。难道都要在各自中进行 new B() 吗。...使用 @Module 注解,需要使用 @InstallIn 注解指定 module 范围 增加了 @Module 注解,其实代表就是一个模块,通过指定组件来告诉在那个容器可以使用绑定安装...Hilt 组件(Compenent) 使用 @Module 注解,需要使用 @Installin 注解来指定 module 范围。...查找了一些资料: 主要问题之一是,通过 Hilt 中发现模块方式,无法区分哪些模块属于应用组件(如果他们确实使用过 Hilt) 已经库或其他库组件 另一个问题是,他将预先构建组件层次结构变得复杂和混乱

1.4K20

Dagger2系列——实例解析

这篇文章会分享一下实际应用Dagger2如何使用,以及Dagger2通过apt插件如何给我们生成代码,以及生成代码之间关联。...当然一个Component可以依赖多个Module,如代码块1:还依赖了AppModule,AppModule中提供了Component方法名是getContext()实例对象,如下代码: @Module...因为Dagger2需要这些标注通过apt插件自动生成代码。 AppComponent中提供IRetrofitRequest单例对象如何在Application中使用呢?...我并没有哪个对象声明用了@Inject注解进行标注,而且AppAppComponent实例对象需要给其他Activity或者使用。...代码是根据什么注解生成: 用@Component注解标注xxxComponent会生成DaggerxxxComponent 用@Module注解标注xxxModule中用@Provides注解标注每个方法都会生成一个

60131
领券