提交 2689751c 编写于 作者: C Chris Beams

Repackaging to remove remaining cycles and increase cohesion

上级 191b829a
<?xml version="1.0" encoding="UTF-8"?>
<beansProjectDescription>
<version>1</version>
<pluginVersion><![CDATA[2.2.1.v200811281800]]></pluginVersion>
<configSuffixes>
<configSuffix><![CDATA[xml]]></configSuffix>
</configSuffixes>
<enableImports><![CDATA[false]]></enableImports>
<configs>
<config>src/test/java/test/basic/AutowiredConfigurationTests.xml</config>
</configs>
<configSets>
</configSets>
</beansProjectDescription>
......@@ -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;
......
......@@ -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;
......
......@@ -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;
/**
......
......@@ -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.*;
......
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;
......
......@@ -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;
......
......@@ -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 {
......
......@@ -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;
......
......@@ -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;
......
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.
......
......@@ -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;
/**
......
......@@ -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;
......
......@@ -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;
......
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
......
package test.basic;
import org.junit.Before;
public abstract class AbstractJavaConfigTests {
@Before
public void setUp() {
}
//protected
}
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; }
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
xmlns:context="http://www.springframework.org/schema/context">
<context:annotation-config/>
<bean class="org.springframework.config.java.process.ConfigurationPostProcessor"/>
<bean class="test.basic.AutowiredConfigurationTests$AutowiredConfig"/>
<bean class="test.basic.AutowiredConfigurationTests$ColorConfig"/>
</beans>
......@@ -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} <var>configClasses</var>, 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
* <var>configClasses</var>.
*
* @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 {
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册