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
This commit is contained in:
@@ -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
|
||||
* 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)
|
||||
|
||||
@@ -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 {
|
||||
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 {
|
||||
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")) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user