用@Singleton做实验,看编译后生成的代码:
猜测这句与单例有关:
进ScopedProvider:
我擦,这不就是单例的写法吗!
可知,在ScopedProvider的对象中保持单例,如果想保证全局单例,需保证
ScopedProvider的对象全局唯一。在我们使用Dagger2注入时,ScopedProvider的对象是通过ScopedProvider.create()创建的,看一下ScopedProvide.create()函数:
这个函数就是简单的new了一个对象,所以要保证全局单例,需要保证create()函数在全局只调用一次,即在Application的onCreate函数中调用ScopedProvider.create()。