Skip to content

Commit 1f5eaf2

Browse files
committed
Basic test for functional bean registration within a configuration class
Issue: SPR-13779
1 parent de35ff1 commit 1f5eaf2

File tree

1 file changed

+45
-16
lines changed

1 file changed

+45
-16
lines changed

spring-context/src/test/java/org/springframework/context/annotation/configuration/ConfigurationClassProcessingTests.java

Lines changed: 45 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import org.springframework.context.event.ContextRefreshedEvent;
5959
import org.springframework.context.support.GenericApplicationContext;
6060
import org.springframework.tests.sample.beans.ITestBean;
61+
import org.springframework.tests.sample.beans.NestedTestBean;
6162
import org.springframework.tests.sample.beans.TestBean;
6263

6364
import static org.junit.Assert.*;
@@ -206,40 +207,50 @@ public void configurationWithPrototypeScopedBeans() {
206207

207208
@Test
208209
public void configurationWithAdaptivePrototypes() {
209-
AnnotationConfigApplicationContext factory = new AnnotationConfigApplicationContext();
210-
factory.register(ConfigWithPrototypeBean.class, AdaptiveInjectionPoints.class);
211-
factory.refresh();
210+
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
211+
ctx.register(ConfigWithPrototypeBean.class, AdaptiveInjectionPoints.class);
212+
ctx.refresh();
212213

213-
AdaptiveInjectionPoints adaptive = factory.getBean(AdaptiveInjectionPoints.class);
214+
AdaptiveInjectionPoints adaptive = ctx.getBean(AdaptiveInjectionPoints.class);
214215
assertEquals("adaptiveInjectionPoint1", adaptive.adaptiveInjectionPoint1.getName());
215216
assertEquals("setAdaptiveInjectionPoint2", adaptive.adaptiveInjectionPoint2.getName());
216217

217-
adaptive = factory.getBean(AdaptiveInjectionPoints.class);
218+
adaptive = ctx.getBean(AdaptiveInjectionPoints.class);
218219
assertEquals("adaptiveInjectionPoint1", adaptive.adaptiveInjectionPoint1.getName());
219220
assertEquals("setAdaptiveInjectionPoint2", adaptive.adaptiveInjectionPoint2.getName());
220-
factory.close();
221+
ctx.close();
221222
}
222223

223224
@Test
224225
public void configurationWithPostProcessor() {
225-
AnnotationConfigApplicationContext factory = new AnnotationConfigApplicationContext();
226-
factory.register(ConfigWithPostProcessor.class);
226+
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
227+
ctx.register(ConfigWithPostProcessor.class);
227228
RootBeanDefinition placeholderConfigurer = new RootBeanDefinition(PropertyPlaceholderConfigurer.class);
228229
placeholderConfigurer.getPropertyValues().add("properties", "myProp=myValue");
229-
factory.registerBeanDefinition("placeholderConfigurer", placeholderConfigurer);
230-
factory.refresh();
230+
ctx.registerBeanDefinition("placeholderConfigurer", placeholderConfigurer);
231+
ctx.refresh();
231232

232-
TestBean foo = factory.getBean("foo", TestBean.class);
233-
ITestBean bar = factory.getBean("bar", ITestBean.class);
234-
ITestBean baz = factory.getBean("baz", ITestBean.class);
233+
TestBean foo = ctx.getBean("foo", TestBean.class);
234+
ITestBean bar = ctx.getBean("bar", ITestBean.class);
235+
ITestBean baz = ctx.getBean("baz", ITestBean.class);
235236

236237
assertEquals("foo-processed-myValue", foo.getName());
237238
assertEquals("bar-processed-myValue", bar.getName());
238239
assertEquals("baz-processed-myValue", baz.getName());
239240

240-
SpousyTestBean listener = factory.getBean("listenerTestBean", SpousyTestBean.class);
241+
SpousyTestBean listener = ctx.getBean("listenerTestBean", SpousyTestBean.class);
241242
assertTrue(listener.refreshed);
242-
factory.close();
243+
ctx.close();
244+
}
245+
246+
@Test
247+
public void configurationWithFunctionalRegistration() {
248+
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
249+
ctx.register(ConfigWithFunctionalRegistration.class);
250+
ctx.refresh();
251+
252+
assertSame(ctx.getBean("spouse"), ctx.getBean(TestBean.class).getSpouse());
253+
assertEquals("functional", ctx.getBean(NestedTestBean.class).getCompany());
243254
}
244255

245256

@@ -419,7 +430,6 @@ public void setAdaptiveInjectionPoint2(TestBean adaptiveInjectionPoint2) {
419430
}
420431

421432

422-
@SuppressWarnings("unused")
423433
static class ConfigWithPostProcessor extends ConfigWithPrototypeBean {
424434

425435
@Value("${myProp}")
@@ -496,4 +506,23 @@ public void onApplicationEvent(ContextRefreshedEvent event) {
496506
}
497507
}
498508

509+
510+
@Configuration
511+
static class ConfigWithFunctionalRegistration {
512+
513+
@Autowired
514+
void register(GenericApplicationContext ctx) {
515+
ctx.registerBean("spouse", TestBean.class,
516+
() -> new TestBean("functional"));
517+
ctx.registerBean(TestBean.class,
518+
() -> new TestBean(ctx.getBean("spouse", TestBean.class)),
519+
bd -> bd.setPrimary(true));
520+
}
521+
522+
@Bean
523+
public NestedTestBean nestedTestBean(TestBean testBean) {
524+
return new NestedTestBean(testBean.getSpouse().getName());
525+
}
526+
}
527+
499528
}

0 commit comments

Comments
 (0)