Guice – 如何通过多个注入器/模块共享同一个Singleton实例
在guice中,@ Singleton范围不涉及Singleton模式。
根据“Dhanji”的“dependency injection”一书:
非常简单,单例的上下文就是注入器本身。 单身的寿命与注射器的寿命有关(如图5.8所示)。 因此,每个注射器只创建一个单例实例。 重要的是要强调最后一点,因为多个喷射器可能存在于同一应用中。 在这种情况下,每个注入器将保存单例范围对象的不同实例。
是否可以通过多个模块和多个喷射器共享同一个Singleton实例?
您可以使用Injector.createChildInjector :
// bind shared singletons here Injector parent = Guice.createInjector(new MySharedSingletonsModule()); // create new injectors that share singletons Injector i1 = parent.createChildInjector(new MyModule1(), new MyModule2()); Injector i2 = parent.createChildInjector(new MyModule3(), new MyModule4()); // now injectors i1 and i2 share all the bindings of parent
我不明白你为什么需要那个,但如果你真的想要,那就有可能:
package stackoverflow; import javax.inject.Inject; import javax.inject.Singleton; import junit.framework.Assert; import org.junit.Test; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Module; public class InjectorSingletonTest { static class ModuleOne extends AbstractModule { @Override protected void configure() { bind(MySingleton.class); } } static class ModuleTwo extends AbstractModule { final MySingleton singleton; @Inject ModuleTwo(MySingleton singleton){ this.singleton = singleton; } @Override protected void configure() { bind(MySingleton.class).toInstance(singleton); } } @Singleton static class MySingleton { } @Test public void test(){ Injector injectorOne = Guice.createInjector(new ModuleOne()); Module moduleTwo = injectorOne.getInstance(ModuleTwo.class); Injector injectorTwo = Guice.createInjector(moduleTwo); MySingleton singletonFromInjectorOne = injectorOne.getInstance(MySingleton.class); MySingleton singletonFromInjectorTwo = injectorTwo.getInstance(MySingleton.class); Assert.assertSame(singletonFromInjectorOne, singletonFromInjectorTwo); } }
- 使用applicationcontext.getbean vs @configurable 的优点
- Java Spring:如何使用`@ Value`注释注入`Environment`属性?
- 有没有一种简单的方法为每个类创建一个记录器实例?
- Guice单身人士是否尊重线程限制?
- 如何在spring boot中使用应用程序上下文获取bean
- 如何在Spring中使用@ComponentScan懒洋洋地加载所有bean?
- Java / Jersey – 使用ParamInjectionResolver创建自己的注入解析器 – 奇怪的行为
- 如何使用springdependency injection连接多个fxml控制器?
- 记录Spring bean创建/dependency injection