Android Dagger2中的Scope到底是干什么用的

凡是用@Scope标注的标注,比如@SIngleton这种的,不论是他提供的,还是你自己自定义的,除了名字不一样之外,效果都是一样的,也就是:只要用这种标注标记了你module中的某个@providers标记的方法,那么这个方法的返回值就会由一个DoubleCheck包装,对外提供一个单例,同一个DaggerCcomponent不论注入几个新的实体,都是用同一个单例,如果不标记,那么多次注入的就是多个实例。


——————以上为新的更新,更新下,之前的理解有问题————————


今天学习了Dagger2,并没有想记录一下怎么使用的,网上有太多的讲解怎么用了,现在就简要记录一下Dagger2中Scope到底是干什么用的。


Dagger2中只有一个加了Scope注解的自定义注解,就是SingleTon,字面意思就是单例的意思。这里的“单例”其实并不是Dagger内部解析了SingleTon并且为每个写了该注解的方法做了单例处理。


其实Dagger2中每个Component里面的Provider(也就是Module里面写的带@Provider注解的方法)都会在生成的代码中做成一个单例,也就是说“Component中的注入的值使用的是《调用module里的方法得到的值的单例》”,同时也意味着,写在Module中的那些添加了@Provider注解的方法,都只会执行一次,以后就都用缓存的值了。


所以用Scope注解了那些注解(例如SingleTonInApplication或者SingleTonInActivity),其实只用用来告诉module和component他俩之间是有约定的,这个约定的名字就是SingleTonInApplication或者SingleTonInActivity,等你要用的时候,因为必须要在对应变量上加这个注解,你就会强行“被”知道这个变量的作用域是SingleTonInApplication或者SingleTonInActivity了。



你可能感兴趣的:(Android开发)