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) | 		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 | 	 * Declare a bean definition using the given callable reference with 1 parameter | ||||||
| 	 * autowired by type for obtaining a new instance. | 	 * 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"); |  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  * you may not use this file except in compliance with the License. |  * you may not use this file except in compliance with the License. | ||||||
|  | @ -156,6 +156,7 @@ class BeanDefinitionDslTests { | ||||||
| 		val beans = beans { | 		val beans = beans { | ||||||
| 			bean<Bar>() | 			bean<Bar>() | ||||||
| 			bean(::baz) | 			bean(::baz) | ||||||
|  | 			bean(::foo) | ||||||
| 		} | 		} | ||||||
| 		val context = GenericApplicationContext().apply { | 		val context = GenericApplicationContext().apply { | ||||||
| 			beans.initialize(this) | 			beans.initialize(this) | ||||||
|  | @ -205,3 +206,4 @@ class FooFoo(val name: String) | ||||||
| class BarBar(val foos: Collection<Foo>) | class BarBar(val foos: Collection<Foo>) | ||||||
| 
 | 
 | ||||||
| fun baz(bar: Bar) = Baz(bar) | fun baz(bar: Bar) = Baz(bar) | ||||||
|  | fun foo() = Foo() | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue