android dagger2 单例,Dagger2进阶-单例
Dagger2中可以很方便的实现单例,但注意这个单例是一个Component作用域范围内的单例,而这个范围,需要上层定义@Scope注解。默认可以使用@Singleton注解,也可以使用自定义其他名称的注解,自定义时参照@Singleton即可,例如@Abc都没有问题,该注解没有特殊作用,只是起标记作用,因此命名与范围相符合更好。
例如可以取如下范围单例:
1.@ApplicationSingleton:进程级别单例
2.@ActivitySingleton:页面级别的单例
单例实现步骤
Dagger2实现单例分2步:
给对应的Component添加范围注解
例如CoffeeShopComponent使用自定的范围注解@ActivitySingleton,代码如下:
@Subcomponent(modules = {SubModule.class})
@ActivitySingleton
public interface CoffeeShopComponent {
@Subcomponent.Builder
interface Builder {
CoffeeShopComponent build();
}
void inject(Street street);
}
给该Component依赖的Module中提供的对象方法加上该范围注解。
例如期望Logger是单例的,则在Logger的providers方法上,增加和Component或父Component一样的范围注解,表示在Component或父Component实例内是单例的。
@Module
public class SubModule {
@ActivitySingleton
@Provides
public Logger providerLogger(Retrofit retrofit) {
return new Logger(retrofit);
}
}
自动注入的对象,直接在类上设置@Scope类型注解,即可设置单例范围,例如:
@ActivitySingleton
public class TestData {
@Inject
public TestData() {
System.out.println("abc");
}
}
注意
如果注入的对象的Scope范围与Component以及父Component的范围都不符合,则会报错:(unscoped) may not reference scoped bindings
如何实现Activity内单例
Activity内单例也就是同一个Activity内部的注入对象,是同一个。因此需要以下2步:
将Activity内部的Component保持只有1个实例,且与其他Activity中的Component为不同的实例
将注入对象设置的@Scope类型注解与Component一致
android dagger2 单例,Dagger2进阶-单例相关推荐
- Java---设计模块(单例的变形)(多例)
设计模式1--单例变形(多例) ★ 缓存在单例中的使用 缓存在编程中使用很频繁,有着非常重要的作用,它能够帮助程序实现以空间换取时间,通常被设计成整个应用程序所共享的一个空间,现要求实现一个用缓存存放 ...
- c# 多线程单例模式_单例模式,多线程单例,双重锁定单例,工场单例创建上下文...
单例模式,多线程单例,双重锁定单例,工厂单例创建上下文. 单例子模式定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个 ...
- Spring容器中 singleton 单例、 prototype多例
项目开发中通常会使用:singleton 单例. prototype多例 Singleton: 在一个spring容器中,对象只有一个实例.(默认值) Prototype: 在一个spring容器中, ...
- scala什么是单例对象_Scala单例和伴侣对象
scala什么是单例对象 Scala中的单例对象 (Singleton objects in Scala) Scala being an object-oriented programming lan ...
- Unity3D C# 单例属性和单例模板及优缺点
1.什么是单例模式 相信我们都遇到过这样的问题: 我们使用new创建对象,这个对象需要全局共享只用这一个 我们需要用一种简单的方式全局能访问一个类创建的唯一对象 总结下来,我们经常需要创建一个类的单例 ...
- Android 依赖注入框架 Dagger2使用
前言 Dagger 2这个匕首确实很难上手,上手后又比较难瞬间掌握,可以这么说,刚开始使用就是用来尝(zhuang)鲜(X)的,但相信随着使用的加深,会不断体会到它对于整个项目架构的极强辅助作用,能使 ...
- 将Android进行到底之Dagger2(一)
系列文章目录 将Android进行到底之Dagger2(二) 将Android进行到底之Dagger2(三) 文章目录 系列文章目录 前言 一.什么是依赖注入? 二.IOC与Dagger2 1.IOC ...
- android 自定义表单,Android实现Ant Design 自定义表单组件
Ant Design 组件提供了Input,InputNumber,Radio,Select,uplod等表单组件,但实际开发中这是不能满足需求,同时我们希望可以继续使用Form提供的验证和提示等方法 ...
- Android清理设备内存具体完整演示样例(二)
版权声明: https://blog.csdn.net/lfdfhl/article/details/27672913 MainActivity例如以下: package cc.c;import ja ...
- Android 收银机Wifi 连接厨房厨单打印机
Android 收银机Wifi 连接厨房厨单打印机 说明 第一次集成热敏打印机,对此相关知识为零,以快速接入为目的. 这里主要记录说明在集成过程中遇到的问题以及排查解决的办法.完整可用Android ...
最新文章
- 了解EOS看这一篇就够了一、团队二、技术三、项目进度四、争议和风险五、展望
- 3000 字详解 Pandas 数据查询,建议收藏
- 为什么黑客用python-为什么大多数黑客都使用Python!
- 如何去除C#Strings中的空格?
- Vijos P1067Warcraft III 守望者的烦恼
- c++ 绘制函数图像_图像轮廓和分水岭算法
- mysql 结构体_mysql模块使用结构体生成数据库表,不识别long类型
- substr 与 substring 的区别
- oracle将日期格式化to_char及字符串转日期to_date
- POJ - 2533(动态规划 —— 最长子序列)
- html5一个可拖动的图片大小,HTML5画布中的可拖动和可调整大小元素
- 对人工智能的初步认识
- 仿QQ登录界面UI设计
- r语言 支持向量机实现_支持向量机解密:R中的实现
- 你真的会开会吗?开会无用说
- CAD镜像一个实体对象
- Parallels Desktop 安装Win 10提示“安全启动功能防止操作系统启动”该怎么解决?
- 计算机个性化桌面,良好的个性化桌面图标管理软件排行榜
- C语言中 %md 的输入输出使用(还有printf函数的 %0格式控制符的使用)
- hive sql 实现姓名手机号证件号脱敏