Skip to content

Commit eed0a3f

Browse files
committed
Allow access to env from SupplierContextDsl
Closes gh-34943
1 parent a8ac541 commit eed0a3f

File tree

2 files changed

+13
-13
lines changed

2 files changed

+13
-13
lines changed

spring-beans/src/main/kotlin/org/springframework/beans/factory/BeanRegistrarDsl.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ open class BeanRegistrarDsl(private val init: BeanRegistrarDsl.() -> Unit): Bean
302302
it.prototype()
303303
}
304304
it.supplier {
305-
SupplierContextDsl<T>(it).supplier()
305+
SupplierContextDsl<T>(it, env).supplier()
306306
}
307307
val resolvableType = ResolvableType.forType(object: ParameterizedTypeReference<T>() {});
308308
if (resolvableType.hasGenerics()) {
@@ -370,7 +370,7 @@ open class BeanRegistrarDsl(private val init: BeanRegistrarDsl.() -> Unit): Bean
370370
it.prototype()
371371
}
372372
it.supplier {
373-
SupplierContextDsl<T>(it).supplier()
373+
SupplierContextDsl<T>(it, env).supplier()
374374
}
375375
val resolvableType = ResolvableType.forType(object: ParameterizedTypeReference<T>() {});
376376
if (resolvableType.hasGenerics()) {
@@ -1074,7 +1074,7 @@ open class BeanRegistrarDsl(private val init: BeanRegistrarDsl.() -> Unit): Bean
10741074
* to bean dependencies.
10751075
*/
10761076
@BeanRegistrarDslMarker
1077-
open class SupplierContextDsl<T>(@PublishedApi internal val context: SupplierContext) {
1077+
open class SupplierContextDsl<T>(@PublishedApi internal val context: SupplierContext, val env: Environment) {
10781078

10791079
/**
10801080
* Return the bean instance that uniquely matches the given object type,

spring-context/src/test/kotlin/org/springframework/context/annotation/BeanRegistrarDslConfigurationTests.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ package org.springframework.context.annotation
1818

1919
import org.assertj.core.api.Assertions.assertThat
2020
import org.assertj.core.api.Assertions.assertThatThrownBy
21-
import org.assertj.core.api.ThrowableAssert
2221
import org.junit.jupiter.api.Test
2322
import org.springframework.beans.factory.BeanRegistrarDsl
2423
import org.springframework.beans.factory.InitializingBean
2524
import org.springframework.beans.factory.NoSuchBeanDefinitionException
2625
import org.springframework.beans.factory.config.BeanDefinition
2726
import org.springframework.beans.factory.getBean
2827
import org.springframework.beans.factory.support.RootBeanDefinition
28+
import org.springframework.mock.env.MockEnvironment
2929
import java.util.function.Supplier
3030

3131
/**
@@ -37,10 +37,13 @@ class BeanRegistrarDslConfigurationTests {
3737

3838
@Test
3939
fun beanRegistrar() {
40-
val context = AnnotationConfigApplicationContext(BeanRegistrarKotlinConfiguration::class.java)
40+
val context = AnnotationConfigApplicationContext()
41+
context.register(BeanRegistrarKotlinConfiguration::class.java)
42+
context.environment = MockEnvironment().withProperty("hello.world", "Hello World!")
43+
context.refresh()
4144
assertThat(context.getBean<Bar>().foo).isEqualTo(context.getBean<Foo>())
4245
assertThat(context.getBean<Foo>("foo")).isEqualTo(context.getBean<Foo>("fooAlias"))
43-
assertThatThrownBy(ThrowableAssert.ThrowingCallable { context.getBean<Baz>() }).isInstanceOf(NoSuchBeanDefinitionException::class.java)
46+
assertThatThrownBy { context.getBean<Baz>() }.isInstanceOf(NoSuchBeanDefinitionException::class.java)
4447
assertThat(context.getBean<Init>().initialized).isTrue()
4548
val beanDefinition = context.getBeanDefinition("bar")
4649
assertThat(beanDefinition.scope).isEqualTo(BeanDefinition.SCOPE_PROTOTYPE)
@@ -53,7 +56,8 @@ class BeanRegistrarDslConfigurationTests {
5356
fun beanRegistrarWithProfile() {
5457
val context = AnnotationConfigApplicationContext()
5558
context.register(BeanRegistrarKotlinConfiguration::class.java)
56-
context.getEnvironment().addActiveProfile("baz")
59+
context.environment = MockEnvironment().withProperty("hello.world", "Hello World!")
60+
context.environment.addActiveProfile("baz")
5761
context.refresh()
5862
assertThat(context.getBean<Bar>().foo).isEqualTo(context.getBean<Foo>())
5963
assertThat(context.getBean<Baz>().message).isEqualTo("Hello World!")
@@ -101,7 +105,7 @@ class BeanRegistrarDslConfigurationTests {
101105
Bar(bean<Foo>())
102106
}
103107
profile("baz") {
104-
registerBean { Baz("Hello World!") }
108+
registerBean { Baz(env.getRequiredProperty("hello.world")) }
105109
}
106110
registerBean<Init>()
107111
registerBean(::booFactory, "fooFactory")
@@ -113,11 +117,7 @@ class BeanRegistrarDslConfigurationTests {
113117

114118
private class GenericBeanRegistrar : BeanRegistrarDsl({
115119
registerBean<Supplier<Foo>>(name = "fooSupplier") {
116-
object: Supplier<Foo> {
117-
override fun get(): Foo {
118-
return Foo()
119-
}
120-
}
120+
Supplier<Foo> { Foo() }
121121
}
122122
})
123123

0 commit comments

Comments
 (0)