Dagger2 中虽然概念挺多的,但是大部分花时间都能理清。包括看人家的分析,Debug 代码下去也能懂。但是对于 scope 的用法以及实现原理还是有点难理解的。主要的问题也像简书上的文章所说:

  自定义注解是怎么工作的?是不是命名了就能达到自己想要达到能够控制自己所提供的组建的生命周期的生命周期的功能?引用的说法就是这么一个回事:

  比如Singleton就可以实现单例,PerActivity就可以创建的类实例与Activity“共生死“,是不是我定义一个PerFragment的注解,同样可以达到创建的类实例就与Fragment“共生死“。

  Singleton 是 scope 的默认实现。也就是说 Singleton 是 scope 的一个表现形式,系统已经给我们提供了。那么为什么需要这样一个 Singleton 呢?以及这个 SingleTon 是怎么实现出来的。

  对于后面说的一点,看过很多文章去尝试理解。

  一个 app 要有一个全局的 Component(我们暂且叫ApplicationComponent),ApplicationComponent 负责管理整个 app 用到的全局类实例,那不可否认的是这些全局类实例应该都是单例的。

  就有人说:Singleton 并没有创建单例的能力。不是说你用 Singleton 修饰了某个实例,它在全局范围内就是单例的了。真正用创建 Singleton 的过程步骤为:

  在 Module 中定义创建全局类实例的方法

  ApplicationComponent 管理 Module

  保证 ApplicationComponent 只有一个实例(在 app 的 Application 中实例化 ApplicationComponent )

  所以讲 Singleton 并没有创建单例的能力,进而引申出并不是用 Scope 修饰的实例就有一定的生命周期的控制等等概念。

  看到一篇文章底下的评论如是说:

  用MyScope 标注的 Component,如果 Moudle 中的 provide 也被MyScope标注,那么在这个Component的生命周期内 ,这个 provide提供的对象是单例的。

  这样一看,仔细想一下也是能够理解的。更多的时候我们的 scope 以及 Singleton 只是一个标识符而已。

  最后牛晓伟的那篇文章最后一些还是没明白:

  更好的管理 Component 之间的组织方式,不管是依赖方式还是包含方式,都有必要用自定义的Scope 注解标注这些 Component,这些注解最好不要一样了,不一样是为了能更好的体现出Component 之间的组织方式。还有编译器检查有依赖关系或包含关系的 Component,若发现有Component 没有用自定义 Scope 注解标注,则会报错。

  更好的管理 Component 与 Module 之间的匹配关系,编译器会检查 Component 管理的 Modules,若发现标注 Component 的自定义 Scope 注解与 Modules 中的标注创建类实例方法的注解不一样,就会报错。

  可读性提高,如用 Singleton 标注全局类,这样让程序猿立马就能明白这类是全局单例类。

  特别对于第一点还是不太明白。记录下来以后还是实践中多总结吧

Dagger2 中的 Scope的更多相关文章

  1. 依赖注入及AOP简述(十)——Web开发中常用Scope简介 .

    1.2.    Web开发中常用Scope简介 这里主要介绍基于Servlet的Web开发中常用的Scope. l        第一个比较常用的就是Application级Scope,通常我们会将一 ...

  2. 理解vue中的scope的使用

    理解vue中的scope的使用 我们都知道vue slot插槽可以传递任何属性或html元素,但是在调用组件的页面中我们可以使用 template scope="props"来获取 ...

  3. MAVEN中的Scope

    Dependency Scope 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用6个值: *im ...

  4. Maven依赖中的scope详解

    scope的分类 compile 默认就是compile,什么都不配置也就是意味着compile.compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的 ...

  5. Maven依赖中的scope详解,在eclipse里面用maven install可以编程成功,到服务器上用命令执行报VM crash错误

    Maven依赖中的scope详解 项目中用了<scope>test</scope>在eclipse里面用maven install可以编译成功,到服务器上用命令执行报VM cr ...

  6. angularjs指令中的scope

    共享 scope 使用共享 scope 的时候,可以直接从父 scope 中共享属性.因此下面示例可以将那么属性的值输出出来.使用的是父 scope 中定义的值. js代码: app.controll ...

  7. angularjs 中的scope继承关系——(2)

    转自:http://www.lovelucy.info/understanding-scopes-in-angularjs.html angularjs 中的scope继承关系 ng-include ...

  8. spring中的scope详解

    spring容器中的bean默认是单例模式的,改成非单例模式需要在类上加上@Scope("prototype") 1. scope概论 spring中scope是一个非常关键的概念 ...

  9. HTML表格中<td scope="col">与<td scope="row">的含义

    HTML表格中<td scope="col">与<td scope="row">的含义 表格中 <td scope="c ...

随机推荐

  1. nodejs unit test related----faker-cli, sinonjs, mock/stub

    http://www.tuicool.com/articles/rAnaYvn http://www.tuicool.com/articles/Y73aYn (contrast stub and mo ...

  2. <2014 05 10> Android平台开发攻略

    1.标准SDK开发: IDE: Eclipse Netbeans Language: Java 2.标准NDK+SDK开发: IDE: Eclipse Language: Java(JNI) C/C+ ...

  3. 我的Android进阶之旅------>解决Android Studio全局搜索搜不到结果的问题

    1.问题描述 今天使用Android Studio时,想通过使用快捷键Ctrl+Shift+F来进行全局搜索指定字符串,如下图所示:想搜索字符串"码农偷懒了", 打开string. ...

  4. Ngfor遍历map的方法

    Ngfor可以遍历list和数组,但如果想遍历map,可以使用下面的方式 在TypeScript文件中: let list = Object.keys(MyObject); 在html文件中: *ng ...

  5. 吴超老师课程---Hadoop的伪分布安装

    1.1 设置ip地址    执行命令    service network restart    验证:         ifconfig1.2 关闭防火墙    执行命令    service ip ...

  6. 中文Appium API 文档

    该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/s ...

  7. 前端 and css小技巧

    随意更改网页 重新格式化代码,解决缩进问题 https://q1mi.github.io/PythonBlog/post/about_frontend/ css margin: 0 auto 居中 文 ...

  8. JAVA中字符串问题

    JAVA中对象创建 通过new关键字来创建对象 通过newInstance()方法来创建对象 使用反序列化机制中IO流中恢复Java对象 通过clone()方法复制一个对象 直接量方式,String ...

  9. cart_购物车小程序

    #author:leon product_list= [ ('iphone',5800), ('mac pro',9800), ('bike',800), ('watch',6000), ('coff ...

  10. js 的一些兼容性写法

    ①添加事件方法 addHandler:function(element,type,handler){     if(element.addEventListener){//检测是否为DOM2级方法   ...