提交 1f5eaf20 编写于 作者: J Juergen Hoeller

Basic test for functional bean registration within a configuration class

Issue: SPR-13779
上级 de35ff11
......@@ -58,6 +58,7 @@ import org.springframework.context.annotation.Scope;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.tests.sample.beans.ITestBean;
import org.springframework.tests.sample.beans.NestedTestBean;
import org.springframework.tests.sample.beans.TestBean;
import static org.junit.Assert.*;
......@@ -206,40 +207,50 @@ public class ConfigurationClassProcessingTests {
@Test
public void configurationWithAdaptivePrototypes() {
AnnotationConfigApplicationContext factory = new AnnotationConfigApplicationContext();
factory.register(ConfigWithPrototypeBean.class, AdaptiveInjectionPoints.class);
factory.refresh();
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(ConfigWithPrototypeBean.class, AdaptiveInjectionPoints.class);
ctx.refresh();
AdaptiveInjectionPoints adaptive = factory.getBean(AdaptiveInjectionPoints.class);
AdaptiveInjectionPoints adaptive = ctx.getBean(AdaptiveInjectionPoints.class);
assertEquals("adaptiveInjectionPoint1", adaptive.adaptiveInjectionPoint1.getName());
assertEquals("setAdaptiveInjectionPoint2", adaptive.adaptiveInjectionPoint2.getName());
adaptive = factory.getBean(AdaptiveInjectionPoints.class);
adaptive = ctx.getBean(AdaptiveInjectionPoints.class);
assertEquals("adaptiveInjectionPoint1", adaptive.adaptiveInjectionPoint1.getName());
assertEquals("setAdaptiveInjectionPoint2", adaptive.adaptiveInjectionPoint2.getName());
factory.close();
ctx.close();
}
@Test
public void configurationWithPostProcessor() {
AnnotationConfigApplicationContext factory = new AnnotationConfigApplicationContext();
factory.register(ConfigWithPostProcessor.class);
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(ConfigWithPostProcessor.class);
RootBeanDefinition placeholderConfigurer = new RootBeanDefinition(PropertyPlaceholderConfigurer.class);
placeholderConfigurer.getPropertyValues().add("properties", "myProp=myValue");
factory.registerBeanDefinition("placeholderConfigurer", placeholderConfigurer);
factory.refresh();
ctx.registerBeanDefinition("placeholderConfigurer", placeholderConfigurer);
ctx.refresh();
TestBean foo = factory.getBean("foo", TestBean.class);
ITestBean bar = factory.getBean("bar", ITestBean.class);
ITestBean baz = factory.getBean("baz", ITestBean.class);
TestBean foo = ctx.getBean("foo", TestBean.class);
ITestBean bar = ctx.getBean("bar", ITestBean.class);
ITestBean baz = ctx.getBean("baz", ITestBean.class);
assertEquals("foo-processed-myValue", foo.getName());
assertEquals("bar-processed-myValue", bar.getName());
assertEquals("baz-processed-myValue", baz.getName());
SpousyTestBean listener = factory.getBean("listenerTestBean", SpousyTestBean.class);
SpousyTestBean listener = ctx.getBean("listenerTestBean", SpousyTestBean.class);
assertTrue(listener.refreshed);
factory.close();
ctx.close();
}
@Test
public void configurationWithFunctionalRegistration() {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(ConfigWithFunctionalRegistration.class);
ctx.refresh();
assertSame(ctx.getBean("spouse"), ctx.getBean(TestBean.class).getSpouse());
assertEquals("functional", ctx.getBean(NestedTestBean.class).getCompany());
}
......@@ -419,7 +430,6 @@ public class ConfigurationClassProcessingTests {
}
@SuppressWarnings("unused")
static class ConfigWithPostProcessor extends ConfigWithPrototypeBean {
@Value("${myProp}")
......@@ -496,4 +506,23 @@ public class ConfigurationClassProcessingTests {
}
}
@Configuration
static class ConfigWithFunctionalRegistration {
@Autowired
void register(GenericApplicationContext ctx) {
ctx.registerBean("spouse", TestBean.class,
() -> new TestBean("functional"));
ctx.registerBean(TestBean.class,
() -> new TestBean(ctx.getBean("spouse", TestBean.class)),
bd -> bd.setPrimary(true));
}
@Bean
public NestedTestBean nestedTestBean(TestBean testBean) {
return new NestedTestBean(testBean.getSpouse().getName());
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册