diff --git a/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt b/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt index 4b8eb08aaff..fcd3bec60e1 100644 --- a/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt +++ b/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt @@ -195,7 +195,7 @@ open class BeanDefinitionDsl(private val init: BeanDefinitionDsl.() -> Unit, autowireMode: Autowire = Autowire.NO, isAutowireCandidate: Boolean? = null, crossinline function: () -> T) { - + val customizer = BeanDefinitionCustomizer { bd -> scope?.let { bd.scope = scope.name.toLowerCase() } isLazyInit?.let { bd.isLazyInit = isLazyInit } @@ -255,9 +255,11 @@ open class BeanDefinitionDsl(private val init: BeanDefinitionDsl.() -> Unit, */ override fun initialize(context: GenericApplicationContext) { this.context = context + init() for (child in children) { - child.initialize(context) + if (child.condition.invoke(context.environment)) { + child.initialize(context) + } } - init() } } diff --git a/spring-context/src/test/kotlin/org/springframework/context/support/BeanDefinitionDslTests.kt b/spring-context/src/test/kotlin/org/springframework/context/support/BeanDefinitionDslTests.kt index 1bc94b9f79c..2ed638b7e52 100644 --- a/spring-context/src/test/kotlin/org/springframework/context/support/BeanDefinitionDslTests.kt +++ b/spring-context/src/test/kotlin/org/springframework/context/support/BeanDefinitionDslTests.kt @@ -52,18 +52,21 @@ class BeanDefinitionDslTests { @Test fun `Declare beans using profile condition with the functional Kotlin DSL`() { val beans = beans { - bean() - bean("bar") - profile("baz") { - profile("pp") { - bean() + profile("foo") { + bean() + profile("bar") { + bean("bar") } + } + profile("baz") { bean { Baz(ref()) } bean { Baz(ref("bar")) } } } val context = GenericApplicationContext().apply { + environment.addActiveProfile("foo") + environment.addActiveProfile("bar") beans.initialize(this) refresh() } @@ -82,7 +85,9 @@ class BeanDefinitionDslTests { val beans = beans { bean() bean("bar") - bean { FooFoo(env["name"]!!) } + environment( { env["name"].equals("foofoo") } ) { + bean { FooFoo(env["name"]!!) } + } environment( { activeProfiles.contains("baz") } ) { bean { Baz(ref()) } bean { Baz(ref("bar")) } @@ -97,13 +102,12 @@ class BeanDefinitionDslTests { assertNotNull(context.getBean()) assertNotNull(context.getBean("bar")) + assertEquals("foofoo", context.getBean().name) try { context.getBean() fail("Expect NoSuchBeanDefinitionException to be thrown") } catch(ex: NoSuchBeanDefinitionException) { null } - val foofoo = context.getBean() - assertEquals("foofoo", foofoo.name) } @Test // SPR-16412