Browse Source

Fix Kotlin bean DSL conditional handling

Issue: SPR-16412
pull/1846/head
Sebastien Deleuze 8 years ago
parent
commit
b71d0eeec9
  1. 8
      spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt
  2. 20
      spring-context/src/test/kotlin/org/springframework/context/support/BeanDefinitionDslTests.kt

8
spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt

@ -195,7 +195,7 @@ open class BeanDefinitionDsl(private val init: BeanDefinitionDsl.() -> Unit, @@ -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, @@ -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()
}
}

20
spring-context/src/test/kotlin/org/springframework/context/support/BeanDefinitionDslTests.kt

@ -52,18 +52,21 @@ class BeanDefinitionDslTests { @@ -52,18 +52,21 @@ class BeanDefinitionDslTests {
@Test
fun `Declare beans using profile condition with the functional Kotlin DSL`() {
val beans = beans {
bean<Foo>()
bean<Bar>("bar")
profile("baz") {
profile("pp") {
bean<Foo>()
profile("foo") {
bean<Foo>()
profile("bar") {
bean<Bar>("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 { @@ -82,7 +85,9 @@ class BeanDefinitionDslTests {
val beans = beans {
bean<Foo>()
bean<Bar>("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 { @@ -97,13 +102,12 @@ class BeanDefinitionDslTests {
assertNotNull(context.getBean<Foo>())
assertNotNull(context.getBean<Bar>("bar"))
assertEquals("foofoo", context.getBean<FooFoo>().name)
try {
context.getBean<Baz>()
fail("Expect NoSuchBeanDefinitionException to be thrown")
}
catch(ex: NoSuchBeanDefinitionException) { null }
val foofoo = context.getBean<FooFoo>()
assertEquals("foofoo", foofoo.name)
}
@Test // SPR-16412

Loading…
Cancel
Save