Browse Source

Avoid requiring `it` parameter in Kotlin bean DSL

By using function literals with receiver, we can avoid requiring
lambda parameters for a shorter and nicer syntax. Based on a
proposal from Joseph Taylor.

Issue: SPR-15815
pull/1481/merge
Sebastien Deleuze 7 years ago
parent
commit
29c112c010
  1. 4
      spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt
  2. 16
      spring-context/src/test/kotlin/org/springframework/context/support/BeanDefinitionDslTests.kt

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

@ -89,7 +89,7 @@ open class BeanDefinitionDsl(val condition: (ConfigurableEnvironment) -> Boolean @@ -89,7 +89,7 @@ open class BeanDefinitionDsl(val condition: (ConfigurableEnvironment) -> Boolean
isLazyInit: Boolean? = null,
isPrimary: Boolean? = null,
isAutowireCandidate: Boolean? = null,
crossinline function: (BeanDefinitionContext) -> T) {
crossinline function: BeanDefinitionContext.() -> T) {
val customizer = BeanDefinitionCustomizer { bd ->
scope?.let { bd.scope = scope.name.toLowerCase() }
@ -122,7 +122,7 @@ open class BeanDefinitionDsl(val condition: (ConfigurableEnvironment) -> Boolean @@ -122,7 +122,7 @@ open class BeanDefinitionDsl(val condition: (ConfigurableEnvironment) -> Boolean
* Take in account bean definitions enclosed in the provided lambda only when the
* specified environment-based predicate is true.
*/
fun environment(condition: (ConfigurableEnvironment) -> Boolean, init: BeanDefinitionDsl.() -> Unit): BeanDefinitionDsl {
fun environment(condition: ConfigurableEnvironment.() -> Boolean, init: BeanDefinitionDsl.() -> Unit): BeanDefinitionDsl {
val beans = BeanDefinitionDsl(condition::invoke)
beans.init()
children.add(beans)

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

@ -32,8 +32,8 @@ class BeanDefinitionDslTests { @@ -32,8 +32,8 @@ class BeanDefinitionDslTests {
val beans = beans {
bean<Foo>()
bean<Bar>("bar", scope = Scope.PROTOTYPE)
bean { Baz(it.ref<Bar>()) }
bean { Baz(it.ref("bar")) }
bean { Baz(ref()) }
bean { Baz(ref("bar")) }
}
val context = GenericApplicationContext()
@ -55,8 +55,8 @@ class BeanDefinitionDslTests { @@ -55,8 +55,8 @@ class BeanDefinitionDslTests {
profile("pp") {
bean<Foo>()
}
bean { Baz(it.ref<Bar>()) }
bean { Baz(it.ref("bar")) }
bean { Baz(ref()) }
bean { Baz(ref("bar")) }
}
}
@ -78,10 +78,10 @@ class BeanDefinitionDslTests { @@ -78,10 +78,10 @@ class BeanDefinitionDslTests {
val beans = beans {
bean<Foo>()
bean<Bar>("bar")
bean { FooFoo(it.env["name"]) }
environment({it.activeProfiles.contains("baz")}) {
bean { Baz(it.ref()) }
bean { Baz(it.ref("bar")) }
bean { FooFoo(env["name"]) }
environment( { activeProfiles.contains("baz") } ) {
bean { Baz(ref()) }
bean { Baz(ref("bar")) }
}
}

Loading…
Cancel
Save