Java 匕首2,两个从属组件不能共享同一范围

Java 匕首2,两个从属组件不能共享同一范围,java,android,dagger-2,Java,Android,Dagger 2,作为一个问题,我知道匕首2从以下链接 两个依赖组件不能共享同一作用域 但是,我不清楚下面链接中提到的原因 杰克沃顿说… 具有相同作用域的两个组件可能会破坏作用域 从你的例子来看: Component1 c1=匕首_Component1.create() Component2 c2_a=Dagger_Component2.builder().component1(c1.build() Component2 c2_b=Dagger_Component2.builder().component1(

作为一个问题,我知道匕首2从以下链接

两个依赖组件不能共享同一作用域

但是,我不清楚下面链接中提到的原因

杰克沃顿说…

具有相同作用域的两个组件可能会破坏作用域

从你的例子来看:

Component1 c1=匕首_Component1.create()

Component2 c2_a=Dagger_Component2.builder().component1(c1.build()

Component2 c2_b=Dagger_Component2.builder().component1(c1.build()

c1有单例,这些单例在c2_a和c2_b之间使用,但组件2中的单例在c2_a和c2_b中得到单独的实例

它是如何破碎的## c2_a将修改c1的范围,或者它将如何打破


谢谢大家。

假设组件1和组件2的作用域名为@AwesomeScope

假设组件2为@AwesomeScope提供了一个香蕉

当c1被创建时,它会创建一个很棒的范围。当c2_a根据c1创建时,它不会创建awesome作用域,因为c1已经有awesome作用域。相反,c2_a共享c1创建的可怕范围

创建c2_b时,它还共享c1创建的范围,原因与上面的c2_a相同

从上面,我们可以推断c2_b和c2_a共享由c1创建的相同范围

当c2_a试图为Aawesome范围创建一个香蕉时,它会遍历依赖项,以查看Aawesome范围中还有另一个香蕉。c_2a只看到c1有可怕的范围。由于c1没有香蕉,c_2a创建香蕉并将其保存在c_2a实例中,因为c_2a被定义为有一个很棒的作用域

创建c2_b时也会发生相同的事件,因为c2_b无法到达相同范围内的c2_a并检查c2_a是否有香蕉。现在c1_a和c2_b都有香蕉,这意味着在一个可怕的范围内有两个香蕉。因为每个可怕的范围中只应该存在一个香蕉,所以我们可以得出结论,它打破了范围