Java 单子在匕首上的一种方法
在Dagger文档中,它显示了以下内容:Java 单子在匕首上的一种方法,java,dagger-2,Java,Dagger 2,在Dagger文档中,它显示了以下内容: @Provides @Singleton static Heater provideHeater() { return new ElectricHeater(); } 我习惯于在只存在一个类实例的类上看到单例。在方法上使用@Singleton有什么意义?即使没有Dagger,你也不会得到一个方法的实例。无论一个类实例是否为单实例,一个方法永远不会有多个实例。文件规定: 该图将使用该值的单个实例来表示其所有属性 客户 这到底是什么意思?这是否意味着每
@Provides @Singleton static Heater provideHeater() {
return new ElectricHeater();
}
我习惯于在只存在一个类实例的类上看到单例。在方法上使用@Singleton有什么意义?即使没有Dagger,你也不会得到一个方法的实例。无论一个类实例是否为单实例,一个方法永远不会有多个实例。文件规定:
该图将使用该值的单个实例来表示其所有属性
客户
这到底是什么意思?这是否意味着每次调用该方法时,它都返回完全相同的电热器实例?您创建了一个也标有
@Singleton
的组件,并将此@Module
赋予它,使其能够提供电热器
:
@Singleton
@Component(modules = HeaterModule.class)
public interface SingletonComponent {
Heater heater();
}
然后,您可以像往常一样使用Dagger创建该组件的实例,并调用heater()
方法,您将始终获得相同的实例
SingletonComponent component = DaggerSingletonComponent.create();
Heater heater1 = component.heater();
Heater heater2 = component.heater();
assertThat(heater1).isSameAs(heater2); // heater1 == heater2
但是,如果它没有范围,或者您正在与不同的组件实例对话,您将得到不同的实例
SingletonComponent component1 = DaggerSingletonComponent.create();
SingletonComponent component2 = DaggerSingletonComponent.create(); // probably a bug that you have *two* of a "singleton", but i've seen it before nonetheless
Heater heater1 = component1.heater();
Heater heater2 = component2.heater();
assertThat(heater1).isNotSameAs(heater2); // heater1 != heater2
您创建一个也标有
@Singleton
的组件,并将此@Module
赋予该组件,使其能够提供加热器
:
@Singleton
@Component(modules = HeaterModule.class)
public interface SingletonComponent {
Heater heater();
}
然后,您可以像往常一样使用Dagger创建该组件的实例,并调用heater()
方法,您将始终获得相同的实例
SingletonComponent component = DaggerSingletonComponent.create();
Heater heater1 = component.heater();
Heater heater2 = component.heater();
assertThat(heater1).isSameAs(heater2); // heater1 == heater2
但是,如果它没有范围,或者您正在与不同的组件实例对话,您将得到不同的实例
SingletonComponent component1 = DaggerSingletonComponent.create();
SingletonComponent component2 = DaggerSingletonComponent.create(); // probably a bug that you have *two* of a "singleton", but i've seen it before nonetheless
Heater heater1 = component1.heater();
Heater heater2 = component2.heater();
assertThat(heater1).isNotSameAs(heater2); // heater1 != heater2