Support noarg callable references in Kotlin beans DSL
Closes gh-23395
This commit is contained in:
parent
0801a7d7e4
commit
3f1882c4eb
|
|
@ -236,6 +236,42 @@ open class BeanDefinitionDsl internal constructor (private val init: BeanDefinit
|
|||
context.registerBean(beanName, T::class.java, Supplier { function.invoke(BeanSupplierContext(context)) }, customizer)
|
||||
}
|
||||
|
||||
/**
|
||||
* Declare a bean definition using the given callable reference with no parameter
|
||||
* for obtaining a new instance.
|
||||
*
|
||||
* @param f the callable reference
|
||||
* @param name the name of the bean
|
||||
* @param scope Override the target scope of this bean, specifying a new scope name.
|
||||
* @param isLazyInit Set whether this bean should be lazily initialized.
|
||||
* @param isPrimary Set whether this bean is a primary autowire candidate.
|
||||
* @param isAutowireCandidate Set whether this bean is a candidate for getting
|
||||
* autowired into some other bean.
|
||||
* @param initMethodName Set the name of the initializer method
|
||||
* @param destroyMethodName Set the name of the destroy method
|
||||
* @param description Set a human-readable description of this bean definition
|
||||
* @param role Set the role hint for this bean definition
|
||||
* @see GenericApplicationContext.registerBean
|
||||
* @see org.springframework.beans.factory.config.BeanDefinition
|
||||
* @since 5.2.3
|
||||
*/
|
||||
inline fun <reified T: Any>
|
||||
bean(crossinline f: () -> T,
|
||||
name: String? = null,
|
||||
scope: BeanDefinitionDsl.Scope? = null,
|
||||
isLazyInit: Boolean? = null,
|
||||
isPrimary: Boolean? = null,
|
||||
isAutowireCandidate: Boolean? = null,
|
||||
initMethodName: String? = null,
|
||||
destroyMethodName: String? = null,
|
||||
description: String? = null,
|
||||
role: BeanDefinitionDsl.Role? = null) {
|
||||
|
||||
bean(name, scope, isLazyInit, isPrimary, isAutowireCandidate, initMethodName, destroyMethodName, description, role) {
|
||||
f.invoke()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Declare a bean definition using the given callable reference with 1 parameter
|
||||
* autowired by type for obtaining a new instance.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2019 the original author or authors.
|
||||
* Copyright 2002-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -156,6 +156,7 @@ class BeanDefinitionDslTests {
|
|||
val beans = beans {
|
||||
bean<Bar>()
|
||||
bean(::baz)
|
||||
bean(::foo)
|
||||
}
|
||||
val context = GenericApplicationContext().apply {
|
||||
beans.initialize(this)
|
||||
|
|
@ -205,3 +206,4 @@ class FooFoo(val name: String)
|
|||
class BarBar(val foos: Collection<Foo>)
|
||||
|
||||
fun baz(bar: Bar) = Baz(bar)
|
||||
fun foo() = Foo()
|
||||
|
|
|
|||
Loading…
Reference in New Issue