Skip to content

Commit

Permalink
Support noarg callable references in Kotlin beans DSL
Browse files Browse the repository at this point in the history
Closes gh-23395
  • Loading branch information
sdeleuze committed Jan 13, 2020
1 parent 0801a7d commit 3f1882c
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Original file line number Diff line number Diff line change
@@ -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.
Expand Down Expand Up @@ -156,6 +156,7 @@ class BeanDefinitionDslTests {
val beans = beans {
bean<Bar>()
bean(::baz)
bean(::foo)
}
val context = GenericApplicationContext().apply {
beans.initialize(this)
Expand Down Expand Up @@ -205,3 +206,4 @@ class FooFoo(val name: String)
class BarBar(val foos: Collection<Foo>)

fun baz(bar: Bar) = Baz(bar)
fun foo() = Foo()

0 comments on commit 3f1882c

Please sign in to comment.