5 changed files with 187 additions and 5 deletions
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
package org.springframework.beans.factory |
||||
|
||||
import kotlin.reflect.KClass |
||||
|
||||
/** |
||||
* Extension for [BeanFactory] providing [KClass] based API. |
||||
* |
||||
* @since 5.0 |
||||
*/ |
||||
object BeanFactoryExtension { |
||||
|
||||
/** |
||||
* @see BeanFactory.getBean(Class<T>) |
||||
*/ |
||||
fun <T : Any> BeanFactory.getBean(requiredType: KClass<T>) = getBean(requiredType.java) |
||||
|
||||
/** |
||||
* @see BeanFactory.getBean(String, Class<T>) |
||||
*/ |
||||
fun <T : Any> BeanFactory.getBean(name: String, requiredType: KClass<T>) = |
||||
getBean(name, requiredType.java) |
||||
|
||||
/** |
||||
* @see BeanFactory.getBean(Class<T>, Object...) |
||||
*/ |
||||
fun <T : Any> BeanFactory.getBean(requiredType: KClass<T>, vararg args:Any) = |
||||
getBean(requiredType.java, *args) |
||||
|
||||
} |
@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
|
||||
package org.springframework.beans.factory |
||||
|
||||
import kotlin.reflect.KClass |
||||
|
||||
/** |
||||
* Extension for [ListableBeanFactory] providing [KClass] based API. |
||||
* |
||||
* @since 5.0 |
||||
*/ |
||||
object ListableBeanFactoryExtension { |
||||
|
||||
/** |
||||
* @see ListableBeanFactory.getBeanNamesForType(Class<?>) |
||||
*/ |
||||
fun <T : Any> ListableBeanFactory.getBeanNamesForType(type: KClass<T>) = |
||||
getBeanNamesForType(type.java) |
||||
|
||||
/** |
||||
* @see ListableBeanFactory.getBeanNamesForType(Class<?>, boolean, boolean) |
||||
*/ |
||||
fun <T : Any> ListableBeanFactory.getBeanNamesForType(type: KClass<T>, |
||||
includeNonSingletons: Boolean, allowEagerInit: Boolean) = |
||||
getBeanNamesForType(type.java, includeNonSingletons, allowEagerInit) |
||||
|
||||
/** |
||||
* @see ListableBeanFactory.getBeansOfType(Class<T>) |
||||
*/ |
||||
fun <T : Any> ListableBeanFactory.getBeansOfType(type: KClass<T>) = |
||||
getBeansOfType(type.java) |
||||
|
||||
/** |
||||
* @see ListableBeanFactory.getBeansOfType(Class<T>, boolean, boolean) |
||||
*/ |
||||
fun <T : Any> ListableBeanFactory.getBeansOfType(type: KClass<T>, |
||||
includeNonSingletons: Boolean, allowEagerInit: Boolean) = |
||||
getBeansOfType(type.java, includeNonSingletons, allowEagerInit) |
||||
|
||||
/** |
||||
* @see ListableBeanFactory.getBeanNamesForAnnotation |
||||
*/ |
||||
fun <T : Annotation> ListableBeanFactory.getBeanNamesForAnnotation(type: KClass<T>) = |
||||
getBeanNamesForAnnotation(type.java) |
||||
|
||||
/** |
||||
* @see ListableBeanFactory.getBeansWithAnnotation |
||||
*/ |
||||
fun <T : Annotation> ListableBeanFactory.getBeansWithAnnotation(type: KClass<T>) = |
||||
getBeansWithAnnotation(type.java) |
||||
|
||||
/** |
||||
* @see ListableBeanFactoryExtension.findAnnotationOnBean |
||||
*/ |
||||
fun <T : Annotation> ListableBeanFactory.findAnnotationOnBean(beanName:String, type: KClass<T>) = |
||||
findAnnotationOnBean(beanName, type.java) |
||||
|
||||
} |
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
package org.springframework.context.support |
||||
|
||||
import org.springframework.beans.factory.config.BeanDefinitionCustomizer |
||||
import java.util.function.Supplier |
||||
import kotlin.reflect.KClass |
||||
|
||||
/** |
||||
* Extension for [GenericApplicationContext] providing [KClass] based API and |
||||
* avoiding specifying a class parameter for the [Supplier] based variant thanks to |
||||
* Kotlin reified type parameters. |
||||
* |
||||
* @since 5.0 |
||||
*/ |
||||
object GenericApplicationContextExtension { |
||||
|
||||
/** |
||||
* @see GenericApplicationContext.registerBean(Class<T>, BeanDefinitionCustomizer...) |
||||
*/ |
||||
fun <T : Any> GenericApplicationContext.registerBean(beanClass: KClass<T>, |
||||
vararg customizers: BeanDefinitionCustomizer) { |
||||
registerBean(beanClass.java, *customizers) |
||||
} |
||||
|
||||
/** |
||||
* @see GenericApplicationContext.registerBean(String, Class<T>, BeanDefinitionCustomizer...) |
||||
*/ |
||||
fun <T : Any> GenericApplicationContext.registerBean(beanName: String, beanClass: KClass<T>, |
||||
vararg customizers: BeanDefinitionCustomizer) { |
||||
registerBean(beanName, beanClass.java, *customizers) |
||||
} |
||||
|
||||
/** |
||||
* @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) |
||||
} |
||||
|
||||
/** |
||||
* @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) |
||||
} |
||||
} |
@ -0,0 +1,45 @@
@@ -0,0 +1,45 @@
|
||||
package org.springframework.context.support |
||||
|
||||
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 { |
||||
|
||||
@Test |
||||
fun registerBeanWithClass() { |
||||
val context = GenericApplicationContext() |
||||
context.registerBean(BeanA::class) |
||||
context.refresh() |
||||
assertNotNull(context.getBean(BeanA::class)) |
||||
} |
||||
|
||||
@Test |
||||
fun registerBeanWithNameAndClass() { |
||||
val context = GenericApplicationContext() |
||||
context.registerBean("a", BeanA::class) |
||||
context.refresh() |
||||
assertNotNull(context.getBean("a")) |
||||
} |
||||
|
||||
@Test |
||||
fun registerBeanWithSupplier() { |
||||
val context = GenericApplicationContext() |
||||
context.registerBean(Supplier { BeanA() }) |
||||
context.refresh() |
||||
assertNotNull(context.getBean(BeanA::class)) |
||||
} |
||||
|
||||
@Test |
||||
fun registerBeanWithNameAndSupplier() { |
||||
val context = GenericApplicationContext() |
||||
context.registerBean("a", Supplier { BeanA() }) |
||||
context.refresh() |
||||
assertNotNull(context.getBean("a")) |
||||
} |
||||
|
||||
internal class BeanA |
||||
|
||||
} |
Loading…
Reference in new issue