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); + +}