依赖注入框架dagger2的@Scope注解初探(根据生成的源码进行分析)
来源:互联网 发布:怎么取消数据有效性 编辑:程序博客网 时间:2024/06/06 22:18
依赖注入框架dagger2的@Scope注解初探(根据生成的源码进行分析)
- 为了使讨论的问题更加清晰,我将尽可能减少无关代码,但是本文贴出的代码够初步探究@Scope作用域控制原理了
- 分析结论在文章最后
废话少说,下边开始先交代原始代码场景逻辑
原始场景代码
首先自定义一个@Scpoe注解,用来注解之后提供的依赖
顺便贴一下,@Singleton注解如下
然后定义Component
其所依赖的module如下
DemoActivity如下
生成代码分析
接下来看看DoubleCheck#provider里发生了什么
那么DoubleCheck.provider的参数貌似在有@Scope注解时没有起作用,其实这是故意避免的,因为通过其提供的get方法得到的是DemoModule#provideDemoActivity(),也就不能保证单例性,看一下其源码:
到这就很清楚了,之所以@Scope类型注解能让其保持单例,是因为DoubleCheck#get方法实现了单例:
梳理一下
- Component注入依赖时会在build方法中执行initialize
- 而在initialize中dagger会根据是否有对应的@Scope注解生成不同的代码
- 若有@Scope注解,Provider是DoubleCheck类型,否之是对应的工厂类
- DoubleCheck构造次数(即Component#build次数)决定了@Scope所注解的只是”假单例”,当然,若Provider所提供的本身就是单例那么不受影响,其仍然是单例的
- 由此推断,@Scope只能在Component所注入的作用域内保持“单例”
- 在Application中注入的是全局单例
可能有不准确的地方,欢迎指正
0 0
- 依赖注入框架dagger2的@Scope注解初探(根据生成的源码进行分析)
- 依赖注入框架dagger2的@Scope注解初探(根据生成的源码进行分析)
- Android 神兵利器Dagger2使用详解(四)Scope注解的使用及源码分析
- Dagger2-Android依赖注入框架的学习
- dagger2依赖注入框架源码解析
- Dagger2依赖注入框架
- Dagger2使用(三)Dagger2依赖注入-注解说明
- dagger2的生成源码简单分析
- 浅谈Dagger2依赖注入框架
- 07 Spring框架 依赖注入(四)基于注解的依赖注入
- 依赖注入库 Dagger2 的使用方法
- Java依赖注入库框架 Dagger的源码分析(一)
- dagger2@Scope的一点点
- Android Dagger2(二)源码分析-对象是如何被注入的
- Android依赖注入之Dagger2注解介绍
- Android 使用dagger2进行依赖注入(基础篇)
- Android 使用dagger2进行依赖注入(基础篇)
- 安卓开发 第一篇 关于依赖注入框架dagger2的使用和理解
- pair用法
- Android中实现自定义百分比布局
- java继承关系
- 浪曦C#网络编程
- LCD硬件操作
- 依赖注入框架dagger2的@Scope注解初探(根据生成的源码进行分析)
- Android Studio 技巧之【Extract Parameter】
- Python基础入门教程(4)(数据类型)
- [jQuery EasyUI系列] 创建增删改查应用
- poj 2991 Crane
- activiti工作流视频教程
- Where Softirq Is Invoked
- GC可达性实践-内存泄露分析
- 关于二分查找