From 2689751c2b9f66d06552581941fcba3b60197c4a Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Fri, 27 Feb 2009 22:54:35 +0000 Subject: [PATCH] Repackaging to remove remaining cycles and increase cohesion --- org.springframework.config.java/.springBeans | 14 ++ .../config/java/annotation/Configuration.java | 1 + .../AbstractMethodInterceptor.java | 4 +- .../config/java/{annotation => ext}/Bean.java | 5 +- .../BeanMethodInterceptor.java | 2 +- .../{annotation => ext}/BeanRegistrar.java | 4 +- .../CglibConfigurationEnhancer.java | 2 +- .../InitializingBeanRegistrar.java | 2 +- ...onfigurationModelBeanDefinitionReader.java | 2 +- .../asm/ConfigurationClassMethodVisitor.java | 2 +- .../BeanDefinitionRegistrar.java | 3 +- .../config/java/model/ConfigurationModel.java | 1 - .../java/{annotation => model}/Factory.java | 2 +- .../config/java/model/ModelMethod.java | 3 - .../java/{annotation => model}/Validator.java | 3 +- .../test/basic/AbstractJavaConfigTests.java | 14 ++ .../basic/AutowiredConfigurationTests.java | 39 ++++++ .../basic/AutowiredConfigurationTests.xml | 14 ++ .../src/test/java/test/basic/BasicTests.java | 120 ++++++++---------- 19 files changed, 153 insertions(+), 84 deletions(-) create mode 100644 org.springframework.config.java/.springBeans rename org.springframework.config.java/src/main/java/org/springframework/config/java/{annotation => ext}/AbstractMethodInterceptor.java (91%) rename org.springframework.config.java/src/main/java/org/springframework/config/java/{annotation => ext}/Bean.java (96%) rename org.springframework.config.java/src/main/java/org/springframework/config/java/{annotation => ext}/BeanMethodInterceptor.java (98%) rename org.springframework.config.java/src/main/java/org/springframework/config/java/{annotation => ext}/BeanRegistrar.java (98%) rename org.springframework.config.java/src/main/java/org/springframework/config/java/{annotation => model}/BeanDefinitionRegistrar.java (90%) rename org.springframework.config.java/src/main/java/org/springframework/config/java/{annotation => model}/Factory.java (97%) rename org.springframework.config.java/src/main/java/org/springframework/config/java/{annotation => model}/Validator.java (67%) create mode 100644 org.springframework.config.java/src/test/java/test/basic/AbstractJavaConfigTests.java create mode 100644 org.springframework.config.java/src/test/java/test/basic/AutowiredConfigurationTests.java create mode 100644 org.springframework.config.java/src/test/java/test/basic/AutowiredConfigurationTests.xml diff --git a/org.springframework.config.java/.springBeans b/org.springframework.config.java/.springBeans new file mode 100644 index 0000000000..a0a0dbf99e --- /dev/null +++ b/org.springframework.config.java/.springBeans @@ -0,0 +1,14 @@ + + + 1 + + + + + + + src/test/java/test/basic/AutowiredConfigurationTests.xml + + + + diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/Configuration.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/Configuration.java index b8e33be842..5fe2f126b4 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/Configuration.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/Configuration.java @@ -24,6 +24,7 @@ import java.lang.annotation.Target; import org.springframework.beans.factory.annotation.Autowire; import org.springframework.beans.factory.annotation.Required; +import org.springframework.config.java.ext.Bean; import org.springframework.stereotype.Component; diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/AbstractMethodInterceptor.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/ext/AbstractMethodInterceptor.java similarity index 91% rename from org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/AbstractMethodInterceptor.java rename to org.springframework.config.java/src/main/java/org/springframework/config/java/ext/AbstractMethodInterceptor.java index bdf615860e..d03684a748 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/AbstractMethodInterceptor.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/ext/AbstractMethodInterceptor.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.config.java.annotation; +package org.springframework.config.java.ext; import java.lang.reflect.Method; @@ -33,7 +33,7 @@ import org.springframework.util.Assert; * * @author Chris Beams */ -abstract class AbstractMethodInterceptor implements BeanFactoryAware, MethodInterceptor { +public abstract class AbstractMethodInterceptor implements BeanFactoryAware, MethodInterceptor { protected final Log log = LogFactory.getLog(this.getClass()); protected DefaultListableBeanFactory beanFactory; diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/Bean.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/ext/Bean.java similarity index 96% rename from org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/Bean.java rename to org.springframework.config.java/src/main/java/org/springframework/config/java/ext/Bean.java index d7f7b12fc6..45075810be 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/Bean.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/ext/Bean.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.config.java.annotation; +package org.springframework.config.java.ext; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -26,10 +26,13 @@ import java.util.List; import org.springframework.beans.factory.annotation.Autowire; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.config.java.annotation.Configuration; import org.springframework.config.java.model.ConfigurationClass; import org.springframework.config.java.model.ConfigurationModel; +import org.springframework.config.java.model.Factory; import org.springframework.config.java.model.ModelMethod; import org.springframework.config.java.model.UsageError; +import org.springframework.config.java.model.Validator; /** diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/BeanMethodInterceptor.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/ext/BeanMethodInterceptor.java similarity index 98% rename from org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/BeanMethodInterceptor.java rename to org.springframework.config.java/src/main/java/org/springframework/config/java/ext/BeanMethodInterceptor.java index 4ee4be5c61..8904e14ac7 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/BeanMethodInterceptor.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/ext/BeanMethodInterceptor.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.config.java.annotation; +package org.springframework.config.java.ext; import static java.lang.String.*; diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/BeanRegistrar.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/ext/BeanRegistrar.java similarity index 98% rename from org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/BeanRegistrar.java rename to org.springframework.config.java/src/main/java/org/springframework/config/java/ext/BeanRegistrar.java index 1b583976b6..b9812e81b9 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/BeanRegistrar.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/ext/BeanRegistrar.java @@ -1,4 +1,4 @@ -package org.springframework.config.java.annotation; +package org.springframework.config.java.ext; import static java.lang.String.*; import static org.springframework.util.StringUtils.*; @@ -13,6 +13,8 @@ import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.RootBeanDefinition; +import org.springframework.config.java.annotation.Configuration; +import org.springframework.config.java.model.BeanDefinitionRegistrar; import org.springframework.config.java.model.ConfigurationClass; import org.springframework.config.java.model.MalformedJavaConfigurationException; import org.springframework.config.java.model.ModelMethod; diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/enhancement/CglibConfigurationEnhancer.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/enhancement/CglibConfigurationEnhancer.java index 064d930662..758f77d673 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/enhancement/CglibConfigurationEnhancer.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/enhancement/CglibConfigurationEnhancer.java @@ -40,8 +40,8 @@ import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.DefaultListableBeanFactory; -import org.springframework.config.java.annotation.BeanDefinitionRegistrar; import org.springframework.config.java.annotation.Configuration; +import org.springframework.config.java.model.BeanDefinitionRegistrar; import org.springframework.config.java.model.ConfigurationClass; import org.springframework.config.java.model.ConfigurationModel; import org.springframework.config.java.model.ModelMethod; diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/enhancement/InitializingBeanRegistrar.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/enhancement/InitializingBeanRegistrar.java index fe7f2a000f..692171c21e 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/enhancement/InitializingBeanRegistrar.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/enhancement/InitializingBeanRegistrar.java @@ -18,7 +18,7 @@ package org.springframework.config.java.internal.enhancement; import java.lang.reflect.Method; import org.springframework.beans.factory.support.BeanDefinitionRegistry; -import org.springframework.config.java.annotation.BeanDefinitionRegistrar; +import org.springframework.config.java.model.BeanDefinitionRegistrar; import org.springframework.config.java.model.ModelMethod; class InitializingBeanRegistrar implements BeanDefinitionRegistrar { diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/factory/support/ConfigurationModelBeanDefinitionReader.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/factory/support/ConfigurationModelBeanDefinitionReader.java index dd181113cf..9873db70c7 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/factory/support/ConfigurationModelBeanDefinitionReader.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/factory/support/ConfigurationModelBeanDefinitionReader.java @@ -33,9 +33,9 @@ import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.GenericBeanDefinition; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.config.java.annotation.Configuration; -import org.springframework.config.java.annotation.Factory; import org.springframework.config.java.model.ConfigurationClass; import org.springframework.config.java.model.ConfigurationModel; +import org.springframework.config.java.model.Factory; import org.springframework.config.java.model.ModelMethod; import org.springframework.config.java.plugin.Extension; import org.springframework.config.java.plugin.ExtensionAnnotationBeanDefinitionRegistrar; diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/asm/ConfigurationClassMethodVisitor.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/asm/ConfigurationClassMethodVisitor.java index 1393661ce2..2b89e911c2 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/asm/ConfigurationClassMethodVisitor.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/internal/parsing/asm/ConfigurationClassMethodVisitor.java @@ -29,8 +29,8 @@ import org.objectweb.asm.Label; import org.objectweb.asm.MethodAdapter; import org.objectweb.asm.Opcodes; import org.springframework.config.java.annotation.Configuration; -import org.springframework.config.java.annotation.Factory; import org.springframework.config.java.model.ConfigurationClass; +import org.springframework.config.java.model.Factory; import org.springframework.config.java.model.ModelClass; import org.springframework.config.java.model.ModelMethod; diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/BeanDefinitionRegistrar.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/model/BeanDefinitionRegistrar.java similarity index 90% rename from org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/BeanDefinitionRegistrar.java rename to org.springframework.config.java/src/main/java/org/springframework/config/java/model/BeanDefinitionRegistrar.java index 40f8402dd0..64e62fb6d6 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/BeanDefinitionRegistrar.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/model/BeanDefinitionRegistrar.java @@ -1,9 +1,8 @@ -package org.springframework.config.java.annotation; +package org.springframework.config.java.model; import java.lang.reflect.Method; import org.springframework.beans.factory.support.BeanDefinitionRegistry; -import org.springframework.config.java.model.ModelMethod; /** * Registers bean definition(s) for a particular method, usually based on its annotation metadata. diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/model/ConfigurationModel.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/model/ConfigurationModel.java index 818a6c8939..4d3394d8b6 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/model/ConfigurationModel.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/model/ConfigurationModel.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.List; import org.springframework.config.java.annotation.Configuration; -import org.springframework.config.java.annotation.Validator; /** diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/Factory.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/model/Factory.java similarity index 97% rename from org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/Factory.java rename to org.springframework.config.java/src/main/java/org/springframework/config/java/model/Factory.java index dfe1fbcf70..10cb299e2e 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/Factory.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/model/Factory.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.config.java.annotation; +package org.springframework.config.java.model; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/model/ModelMethod.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/model/ModelMethod.java index 02b3257e20..f410ff6851 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/model/ModelMethod.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/model/ModelMethod.java @@ -28,9 +28,6 @@ import java.util.Set; import net.sf.cglib.proxy.Callback; import net.sf.cglib.proxy.NoOp; -import org.springframework.config.java.annotation.BeanDefinitionRegistrar; -import org.springframework.config.java.annotation.Factory; -import org.springframework.config.java.annotation.Validator; import org.springframework.util.Assert; diff --git a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/Validator.java b/org.springframework.config.java/src/main/java/org/springframework/config/java/model/Validator.java similarity index 67% rename from org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/Validator.java rename to org.springframework.config.java/src/main/java/org/springframework/config/java/model/Validator.java index 5bc29edd75..40e8ed6796 100644 --- a/org.springframework.config.java/src/main/java/org/springframework/config/java/annotation/Validator.java +++ b/org.springframework.config.java/src/main/java/org/springframework/config/java/model/Validator.java @@ -1,8 +1,7 @@ -package org.springframework.config.java.annotation; +package org.springframework.config.java.model; import java.util.List; -import org.springframework.config.java.model.UsageError; /** Marker interface */ //TODO: SJC-242 document diff --git a/org.springframework.config.java/src/test/java/test/basic/AbstractJavaConfigTests.java b/org.springframework.config.java/src/test/java/test/basic/AbstractJavaConfigTests.java new file mode 100644 index 0000000000..a26ab49ba1 --- /dev/null +++ b/org.springframework.config.java/src/test/java/test/basic/AbstractJavaConfigTests.java @@ -0,0 +1,14 @@ +package test.basic; + +import org.junit.Before; + +public abstract class AbstractJavaConfigTests { + + @Before + public void setUp() { + + } + + //protected + +} diff --git a/org.springframework.config.java/src/test/java/test/basic/AutowiredConfigurationTests.java b/org.springframework.config.java/src/test/java/test/basic/AutowiredConfigurationTests.java new file mode 100644 index 0000000000..2d058a409c --- /dev/null +++ b/org.springframework.config.java/src/test/java/test/basic/AutowiredConfigurationTests.java @@ -0,0 +1,39 @@ +package test.basic; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.*; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.config.java.annotation.Configuration; +import org.springframework.config.java.ext.Bean; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import test.beans.Colour; +import test.beans.TestBean; + +public class AutowiredConfigurationTests { + public @Test void test() { + ClassPathXmlApplicationContext factory = new ClassPathXmlApplicationContext( + AutowiredConfigurationTests.class.getSimpleName() + ".xml", + AutowiredConfigurationTests.class); + + assertThat(factory.getBean("colour", Colour.class), equalTo(Colour.RED)); + assertThat(factory.getBean("testBean", TestBean.class).getName(), equalTo(Colour.RED.toString())); + } + + @Configuration + static class AutowiredConfig { + private @Autowired Colour colour; + + public @Bean TestBean testBean() { + return new TestBean(colour.toString()); + } + } + + @Configuration + static class ColorConfig { + public @Bean Colour colour() { return Colour.RED; } + } + +} diff --git a/org.springframework.config.java/src/test/java/test/basic/AutowiredConfigurationTests.xml b/org.springframework.config.java/src/test/java/test/basic/AutowiredConfigurationTests.xml new file mode 100644 index 0000000000..88327c8fc8 --- /dev/null +++ b/org.springframework.config.java/src/test/java/test/basic/AutowiredConfigurationTests.xml @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/org.springframework.config.java/src/test/java/test/basic/BasicTests.java b/org.springframework.config.java/src/test/java/test/basic/BasicTests.java index be29f00bf8..a9c60041e8 100644 --- a/org.springframework.config.java/src/test/java/test/basic/BasicTests.java +++ b/org.springframework.config.java/src/test/java/test/basic/BasicTests.java @@ -5,13 +5,12 @@ import static org.junit.Assert.*; import static org.springframework.beans.factory.support.BeanDefinitionBuilder.*; import org.junit.Test; -import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor; import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.config.BeanFactoryPostProcessor; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.DefaultListableBeanFactory; -import org.springframework.config.java.annotation.Bean; import org.springframework.config.java.annotation.Configuration; +import org.springframework.config.java.ext.Bean; import org.springframework.config.java.process.ConfigurationPostProcessor; import org.springframework.config.java.util.DefaultScopes; @@ -19,46 +18,54 @@ import test.beans.ITestBean; import test.beans.TestBean; public class BasicTests { - @Test - public void test() { - DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); - factory.registerBeanDefinition("config", rootBeanDefinition(Config.class).getBeanDefinition()); - - Config config = factory.getBean("config", Config.class); - assertThat(config, notNullValue()); - } - @Test - public void test2() { + /** + * Creates a new {@link BeanFactory}, populates it with a {@link BeanDefinition} for + * each of the given {@link Configuration} configClasses, and then post-processes + * the factory using JavaConfig's {@link ConfigurationPostProcessor}. When complete, + * the factory is ready to service requests for any {@link Bean} methods declared by + * configClasses. + * + * @param configClasses the {@link Configuration} classes under test. may be an empty list. + * + * @return fully initialized and post-processed {@link BeanFactory} + */ + private static BeanFactory initBeanFactory(Class... configClasses) { DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); - factory.registerBeanDefinition("config", rootBeanDefinition(Config.class).getBeanDefinition()); - BeanFactoryPostProcessor bfpp = new MyPostProcessor(); + for(Class configClass : configClasses) { + String configBeanName = configClass.getName(); + factory.registerBeanDefinition(configBeanName, rootBeanDefinition(configClass).getBeanDefinition()); + } - bfpp.postProcessBeanFactory(factory); + new ConfigurationPostProcessor().postProcessBeanFactory(factory); + + factory.addBeanPostProcessor(new AutowiredAnnotationBeanPostProcessor()); - OtherConfig config = factory.getBean("config", OtherConfig.class); - assertThat(config, notNullValue()); + return factory; } + @Test - public void test3() { - DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); - factory.registerBeanDefinition("config", rootBeanDefinition(Config.class).getBeanDefinition()); - - new ConfigurationPostProcessor().postProcessBeanFactory(factory); + public void simplestPossibleConfiguration() { + BeanFactory factory = initBeanFactory(SimplestPossibleConfig.class); String stringBean = factory.getBean("stringBean", String.class); assertThat(stringBean, equalTo("foo")); } + @Configuration + static class SimplestPossibleConfig { + public @Bean String stringBean() { + return "foo"; + } + } + + @Test - public void test4() { - DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); - factory.registerBeanDefinition("config", rootBeanDefinition(Config2.class).getBeanDefinition()); - - new ConfigurationPostProcessor().postProcessBeanFactory(factory); + public void configurationWithPrototypeScopedBeans() { + BeanFactory factory = initBeanFactory(ConfigWithPrototypeBean.class); TestBean foo = factory.getBean("foo", TestBean.class); ITestBean bar = factory.getBean("bar", ITestBean.class); @@ -67,44 +74,25 @@ public class BasicTests { assertThat(foo.getSpouse(), sameInstance(bar)); assertThat(bar.getSpouse(), not(sameInstance(baz))); } -} - -class MyPostProcessor implements BeanFactoryPostProcessor { - - public void postProcessBeanFactory( - ConfigurableListableBeanFactory beanFactory) throws BeansException { - BeanDefinition beanDefinition = beanFactory.getBeanDefinition("config"); - beanDefinition.setBeanClassName(OtherConfig.class.getName()); - } - -} - -@Configuration -class Config { - public @Bean String stringBean() { - return "foo"; - } -} - -@Configuration -class Config2 { - public @Bean TestBean foo() { - TestBean foo = new TestBean("foo"); - foo.setSpouse(bar()); - return foo; - } - - public @Bean TestBean bar() { - TestBean bar = new TestBean("bar"); - bar.setSpouse(baz()); - return bar; - } - @Bean(scope=DefaultScopes.PROTOTYPE) - public TestBean baz() { - return new TestBean("bar"); + @Configuration + static class ConfigWithPrototypeBean { + public @Bean TestBean foo() { + TestBean foo = new TestBean("foo"); + foo.setSpouse(bar()); + return foo; + } + + public @Bean TestBean bar() { + TestBean bar = new TestBean("bar"); + bar.setSpouse(baz()); + return bar; + } + + @Bean(scope=DefaultScopes.PROTOTYPE) + public TestBean baz() { + return new TestBean("bar"); + } } } -class OtherConfig { -} -- GitLab