From df6e0525f1d6097af5fc774c7b44df9ef8b77db8 Mon Sep 17 00:00:00 2001 From: Taylor Wicksell Date: Fri, 4 Mar 2016 10:10:37 -0800 Subject: [PATCH] add support for custom injector creation --- .../ModuleRegistryConfiguration.java | 28 +++++++++++++------ .../guice/injector/InjectorFactory.java | 18 ++++++++++++ 2 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 src/main/java/org/springframework/guice/injector/InjectorFactory.java diff --git a/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java b/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java index 9b4bc79..b30a806 100644 --- a/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java +++ b/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java @@ -19,6 +19,7 @@ import java.util.List; import java.util.Map.Entry; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.config.ConstructorArgumentValues; import org.springframework.beans.factory.support.BeanDefinitionRegistry; @@ -30,6 +31,7 @@ import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; +import org.springframework.guice.injector.InjectorFactory; import org.springframework.guice.module.SpringModule; import com.google.inject.Binding; @@ -87,18 +89,26 @@ public class ModuleRegistryConfiguration implements BeanDefinitionRegistryPostPr } - @Override - public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { - List modules = new ArrayList(((DefaultListableBeanFactory)registry).getBeansOfType(Module.class).values()); - modules.add(new SpringModule(this.applicationContext)); - Injector injector = createInjector(modules); - mapBindings(injector, registry); - ((ConfigurableListableBeanFactory) registry).registerSingleton(Injector.class.getName(), injector); - } + @Override + public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { + List modules = new ArrayList( + ((DefaultListableBeanFactory) registry).getBeansOfType(Module.class).values()); + modules.add(new SpringModule(this.applicationContext)); + Injector injector = null; + try { + injector = ((DefaultListableBeanFactory) registry).getBean(InjectorFactory.class).createInjector(modules); + } catch (NoSuchBeanDefinitionException e) { + + } + if (injector == null) { + injector = createInjector(modules); + } + mapBindings(injector, registry); + } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext=applicationContext; } -} \ No newline at end of file +} diff --git a/src/main/java/org/springframework/guice/injector/InjectorFactory.java b/src/main/java/org/springframework/guice/injector/InjectorFactory.java new file mode 100644 index 0000000..4428e75 --- /dev/null +++ b/src/main/java/org/springframework/guice/injector/InjectorFactory.java @@ -0,0 +1,18 @@ +package org.springframework.guice.injector; + +import java.util.List; + +import org.springframework.guice.annotation.EnableGuiceModules; + +import com.google.inject.Injector; +import com.google.inject.Module; + +/*** + * Factory which allows for custom creation of the Guice Injector to be used + * in the @{@link EnableGuiceModules} feature. + */ +public interface InjectorFactory { + + public Injector createInjector(List modules); + +}