Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,21 @@

package org.springframework.beans.factory

import org.springframework.core.ParameterizedTypeReference
import org.springframework.core.ResolvableType

/**
* Extension for [ListableBeanFactory.getBeanNamesForType] providing a
* `getBeanNamesForType<Foo>()` variant.
* `getBeanNamesForType<Foo>()` or `getBeanNamesForType<List<Foo>>()` variant.
*
* @author Sebastien Deleuze
* @author Yanming Zhou
* @since 5.0
*/
inline fun <reified T : Any> ListableBeanFactory.getBeanNamesForType(includeNonSingletons: Boolean = true,
allowEagerInit: Boolean = true): Array<out String> =
getBeanNamesForType(T::class.java, includeNonSingletons, allowEagerInit)
getBeanNamesForType(ResolvableType.forType(object : ParameterizedTypeReference<T>() {}),
includeNonSingletons, allowEagerInit)

/**
* Extension for [ListableBeanFactory.getBeansOfType] providing a `getBeansOfType<Foo>()` variant.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,15 @@ import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import org.junit.jupiter.api.Test
import org.springframework.core.ParameterizedTypeReference
import org.springframework.core.ResolvableType
import kotlin.reflect.full.createInstance

/**
* Mock object based tests for ListableBeanFactory Kotlin extensions
*
* @author Sebastien Deleuze
* @author Yanming Zhou
*/
class ListableBeanFactoryExtensionsTests {

Expand All @@ -34,19 +37,27 @@ class ListableBeanFactoryExtensionsTests {
@Test
fun `getBeanNamesForType with reified type parameters`() {
lbf.getBeanNamesForType<Foo>()
verify { lbf.getBeanNamesForType(Foo::class.java, true , true) }
verify { lbf.getBeanNamesForType(ResolvableType.forClass(Foo::class.java), true , true) }
}

@Test
fun `getBeanNamesForType with reified generic type parameters`() {
val foo = listOf(Foo())
lbf.getBeanNamesForType<List<Foo>>()
verify { lbf.getBeanNamesForType(ResolvableType.forType(object : ParameterizedTypeReference<List<Foo>>() {}),
true , true) }
}

@Test
fun `getBeanNamesForType with reified type parameters and Boolean`() {
lbf.getBeanNamesForType<Foo>(false)
verify { lbf.getBeanNamesForType(Foo::class.java, false , true) }
verify { lbf.getBeanNamesForType(ResolvableType.forClass(Foo::class.java), false , true) }
}

@Test
fun `getBeanNamesForType with reified type parameters, Boolean and Boolean`() {
lbf.getBeanNamesForType<Foo>(false, false)
verify { lbf.getBeanNamesForType(Foo::class.java, false , false) }
verify { lbf.getBeanNamesForType(ResolvableType.forClass(Foo::class.java), false , false) }
}

@Test
Expand Down