Browse Source

Avoid the need to specify Supplier in Kotlin bean registration API

Based on an idea from Mario Arias, we can avoid requiring specifying
explicitly Supplier lambda type in Kotlin API by declaring the supplier
parameter as "crossinline supplier: () -> T" instead of
"supplier: Supplier<T>".

Issue: SPR-15118
pull/1289/head
Sebastien Deleuze 9 years ago
parent
commit
715274e327
  1. 10
      spring-context/src/main/kotlin/org/springframework/context/support/GenericApplicationContextExtension.kt
  2. 5
      spring-context/src/test/kotlin/org/springframework/context/support/GenericApplicationContextExtensionTests.kt

10
spring-context/src/main/kotlin/org/springframework/context/support/GenericApplicationContextExtension.kt

@ -33,16 +33,16 @@ object GenericApplicationContextExtension { @@ -33,16 +33,16 @@ object GenericApplicationContextExtension {
/**
* @see GenericApplicationContext.registerBean(Class<T>, Supplier<T>, BeanDefinitionCustomizer...)
*/
inline fun <reified T : Any> GenericApplicationContext.registerBean(supplier: Supplier<T>,
vararg customizers: BeanDefinitionCustomizer) {
registerBean(T::class.java, supplier, *customizers)
inline fun <reified T : Any> GenericApplicationContext.registerBean(
crossinline supplier: () -> T, vararg customizers: BeanDefinitionCustomizer) {
registerBean(T::class.java, Supplier { supplier.invoke() }, *customizers)
}
/**
* @see GenericApplicationContext.registerBean(String, Class<T>, Supplier<T>, BeanDefinitionCustomizer...)
*/
inline fun <reified T : Any> GenericApplicationContext.registerBean(name: String,
supplier: Supplier<T>, vararg customizers: BeanDefinitionCustomizer) {
registerBean(name, T::class.java, supplier, *customizers)
crossinline supplier: () -> T, vararg customizers: BeanDefinitionCustomizer) {
registerBean(name, T::class.java, Supplier { supplier.invoke() }, *customizers)
}
}

5
spring-context/src/test/kotlin/org/springframework/context/support/GenericApplicationContextExtensionTests.kt

@ -4,7 +4,6 @@ import org.junit.Assert.assertNotNull @@ -4,7 +4,6 @@ import org.junit.Assert.assertNotNull
import org.junit.Test
import org.springframework.context.support.GenericApplicationContextExtension.registerBean
import org.springframework.beans.factory.BeanFactoryExtension.getBean
import java.util.function.Supplier
class GenericApplicationContextExtensionTests {
@ -27,7 +26,7 @@ class GenericApplicationContextExtensionTests { @@ -27,7 +26,7 @@ class GenericApplicationContextExtensionTests {
@Test
fun registerBeanWithSupplier() {
val context = GenericApplicationContext()
context.registerBean(Supplier { BeanA() })
context.registerBean({ BeanA() })
context.refresh()
assertNotNull(context.getBean(BeanA::class))
}
@ -35,7 +34,7 @@ class GenericApplicationContextExtensionTests { @@ -35,7 +34,7 @@ class GenericApplicationContextExtensionTests {
@Test
fun registerBeanWithNameAndSupplier() {
val context = GenericApplicationContext()
context.registerBean("a", Supplier { BeanA() })
context.registerBean("a", { BeanA() })
context.refresh()
assertNotNull(context.getBean("a"))
}

Loading…
Cancel
Save