diff --git a/org.springframework.config.java/.springBeans b/org.springframework.config.java/.springBeans
new file mode 100644
index 00000000000..a0a0dbf99ee
--- /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 b8e33be8423..5fe2f126b40 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 bdf615860e5..d03684a7481 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 d7f7b12fc60..45075810be0 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 4ee4be5c61f..8904e14ac70 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 1b583976b68..b9812e81b93 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 064d930662a..758f77d6733 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 fe7f2a000ff..692171c21e9 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 dd181113cf9..9873db70c76 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 1393661ce2b..2b89e911c2b 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 40f8402dd01..64e62fb6d6d 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 818a6c89391..4d3394d8b6e 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 dfe1fbcf706..10cb299e2eb 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 02b3257e203..f410ff6851d 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 5bc29edd754..40e8ed67964 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 00000000000..a26ab49ba1d
--- /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 00000000000..2d058a409c8
--- /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 00000000000..88327c8fc8a
--- /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 be29f00bf8c..a9c60041e84 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();
-
- bfpp.postProcessBeanFactory(factory);
-
- OtherConfig config = factory.getBean("config", OtherConfig.class);
- assertThat(config, notNullValue());
- }
-
- @Test
- public void test3() {
- DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
- factory.registerBeanDefinition("config", rootBeanDefinition(Config.class).getBeanDefinition());
+ for(Class> configClass : configClasses) {
+ String configBeanName = configClass.getName();
+ factory.registerBeanDefinition(configBeanName, rootBeanDefinition(configClass).getBeanDefinition());
+ }
new ConfigurationPostProcessor().postProcessBeanFactory(factory);
+ factory.addBeanPostProcessor(new AutowiredAnnotationBeanPostProcessor());
+
+ return factory;
+ }
+
+
+ @Test
+ 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
+ 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");
+ }
}
}
-@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");
- }
-}
-
-class OtherConfig {
-}