Dagger2 scope】的更多相关文章

1. 一个没有scope的component是不能依赖于另外一个有scope的component 2.@Singleton不是真正意义的单例,比如下面 @Singleton @Component class SingletonComponent{ } class Test{ void test(){ SingletonComponent c1 = DaggerSingletonComponent.create(); SingletonComponent c2 = DaggerSingletonC…
2016-12-21 更新:添加@Subcomponent注解以及Lazy与Provider的使用,本文基本完结!如果有好的建议请提出,感谢大家的支持,谢谢 依赖注入 Dagger2是Android中比较热门的依赖注入框架,什么是依赖注入呢?维基百科上是这样描述的: 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式…
关于Dagger2使用的基础如果你还不了解,可以参考我的上一篇文章解锁Dagger2使用姿势(一),这有助于你理解本篇文章. OK,我们在上篇文章介绍另外Dagger2使用过程中四个基本的注解,分别是@Module.@Provides.@Inject以及@Component.今天我想来说说Dagger2中另外一个注解,那就是@Scope注解.看网上的资料,大家基本上都知道@Scope是用来给依赖划定作用域的,那我今天就来来说说这个作用域的问题. 首先Dagger2中有一个现成的作用域注解,那就是…
Dagger2 中虽然概念挺多的,但是大部分花时间都能理清.包括看人家的分析,Debug 代码下去也能懂.但是对于 scope 的用法以及实现原理还是有点难理解的.主要的问题也像简书上的文章所说: 自定义注解是怎么工作的?是不是命名了就能达到自己想要达到能够控制自己所提供的组建的生命周期的生命周期的功能?引用的说法就是这么一个回事: 比如Singleton就可以实现单例,PerActivity就可以创建的类实例与Activity“共生死“,是不是我定义一个PerFragment的注解,同样可以达…
Qualifier即Named 当module的@Provides提供相同变量的不同属性时:用于区分把哪一个初始化 Module 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class { @Blue @Provides public Cloth getBluecloth(){ Cloth mCloth=new Cloth(); mCloth.setColor("蓝"); return mCloth; } @Named("…
Dagger的Scope注解代表的是作用域,通过实现自定义@Scope注解,标记当前生成对象的使用范围,标识一个类型的注射器只实例化一次,在同一个作用域内,只会生成一个实例, 然后在此作用域内共用一个实例.这样看起来很像单例模式,我们可以查看@Singleton其实就是@Scope的一个默认实现而已.当然,你得是同一个Component对象来生成 Dagger为我们提供了Scope的一种实现Singleton.单例???no!!!no!!!no!!!不是这么简单的.先看一下它的代码: @Scop…
Dagger2是一个Java和Android的依赖注入框架. 本文介绍Android中dagger2的基本使用. 其中包括@Inject, @Component, @Module和@Provides注解的使用. 使用依赖注入的好处 1.使用类和被依赖的对象构造分开,这样如果我们需要改变被依赖类的构造方法,不必改动每一个使用类. 2.对各种被依赖类的实例,可以只构造一次. 3.当我们需要更换一种实现时,只需要保证接口一致. 4.利于单元测试,我们可以方便地mock依赖类的对象. 优点总结: 创建对…
一.作用域Scope 之前了解RoboGuice的时候,我们知道它默认给我们提供了几个注解,ContextSingleton和Singleton,但是Dagger2更为灵活,只有javax包中提供的Singleton注解.更为强大的是,我们可以自定义作用域. 首先我们定义一个运行时的注解. @Scope @Retention(RetentionPolicy.RUNTIME) public @interface PerActivity { } 我们新增加一个Module,专门为Activity中提…
Dagger2 是一个Android依赖注入框架,由谷歌开发,最早的版本Dagger1 由Square公司开发.依赖注入框架主要用于模块间解耦,提高代码的健壮性和可维护性.Dagger 这个库的取名不仅仅来自它的本意"匕首",同时也暗示了它的原理.Jake Wharton 在对 Dagger 的介绍中指出,Dagger 即 DAG-er,这里的 DAG 即数据结构中的 DAG--有向无环图(Directed Acyclic Graph).也就是说,Dagger 是一个基于有向无环图结构…
0. 前言 Dagger2是首个使用生成代码实现完整依赖注入的框架,极大减少了使用者的编码负担,本文主要介绍如何使用dagger2进行依赖注入.如果你不还不了解依赖注入,请看这一篇. 1. 简单的依赖注入 首先我们构建一个简单Android应用.我们创建一个UserModel,然后将它显示到TextView中.这里的问题是,在创建UserModel的时候,我们使用了前文所说的hard init.一旦我们的UserModel的创建方式发生了改变(比如需要传入Context对象到构造函数),我们就需…