@ -26,6 +26,7 @@ import org.jspecify.annotations.Nullable;
@@ -26,6 +26,7 @@ import org.jspecify.annotations.Nullable;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.Test ;
import org.springframework.beans.factory.config.RuntimeBeanReference ;
import org.springframework.beans.factory.support.DefaultListableBeanFactory ;
import org.springframework.beans.factory.support.RootBeanDefinition ;
import org.springframework.beans.factory.support.StaticListableBeanFactory ;
@ -465,9 +466,9 @@ class BeanFactoryUtilsTests {
@@ -465,9 +466,9 @@ class BeanFactoryUtilsTests {
lbf . registerSingleton ( "sfb1" , sfb1 ) ;
lbf . registerSingleton ( "sfb2" , sfb2 ) ;
lbf . registerBeanDefinition ( "recipient" ,
new RootBeanDefinition ( Recipient . class , RootBeanDefinition . AUTOWIRE_CONSTRUCTOR , false ) ) ;
new RootBeanDefinition ( Constructor Recipient. class , RootBeanDefinition . AUTOWIRE_CONSTRUCTOR , false ) ) ;
Recipient recipient = lbf . getBean ( "recipient" , Recipient . class ) ;
Constructor Recipient recipient = lbf . getBean ( "recipient" , Constructor Recipient. class ) ;
assertThat ( recipient . sfb1 ) . isSameAs ( lbf . getBean ( "sfb1" , TestBean . class ) ) ;
assertThat ( recipient . sfb2 ) . isSameAs ( lbf . getBean ( "sfb2" , TestBean . class ) ) ;
@ -553,6 +554,24 @@ class BeanFactoryUtilsTests {
@@ -553,6 +554,24 @@ class BeanFactoryUtilsTests {
assertThat ( lbf . getBean ( "sfb2" ) ) . isInstanceOf ( String . class ) ;
}
@Test
void supportsMultipleTypesWithProperty ( ) {
DefaultListableBeanFactory lbf = new DefaultListableBeanFactory ( ) ;
SupportsTypeSmartFactoryBean sfb = new SupportsTypeSmartFactoryBean ( ) ;
lbf . registerSingleton ( "sfb" , sfb ) ;
RootBeanDefinition rbd1 = new RootBeanDefinition ( PropertyRecipient . class ) ;
rbd1 . getPropertyValues ( ) . add ( "sfb" , new RuntimeBeanReference ( ITestBean . class ) ) ;
lbf . registerBeanDefinition ( "recipient1" , rbd1 ) ;
RootBeanDefinition rbd2 = new RootBeanDefinition ( PropertyRecipient . class ) ;
rbd2 . getPropertyValues ( ) . add ( "sfb" , new RuntimeBeanReference ( "sfb" , ITestBean . class ) ) ;
lbf . registerBeanDefinition ( "recipient2" , rbd2 ) ;
assertThat ( lbf . getBean ( "recipient1" , PropertyRecipient . class ) . sfb ) . isSameAs ( lbf . getBean ( "sfb" , ITestBean . class ) ) ;
assertThat ( lbf . getBean ( "recipient2" , PropertyRecipient . class ) . sfb ) . isSameAs ( lbf . getBean ( "sfb" , ITestBean . class ) ) ;
}
@Retention ( RetentionPolicy . RUNTIME )
@interface ControllerAdvice {
@ -650,9 +669,10 @@ class BeanFactoryUtilsTests {
@@ -650,9 +669,10 @@ class BeanFactoryUtilsTests {
}
static class Recipient {
static class Constructor Recipient {
public Recipient ( ITestBean sfb1 , ITestBean sfb2 , List < ITestBean > testBeanList , List < CharSequence > stringList ,
public ConstructorRecipient ( ITestBean sfb1 , ITestBean sfb2 ,
List < ITestBean > testBeanList , List < CharSequence > stringList ,
ObjectProvider < ITestBean > testBeanProvider , ObjectProvider < CharSequence > stringProvider ) {
this . sfb1 = sfb1 ;
this . sfb2 = sfb2 ;
@ -675,4 +695,14 @@ class BeanFactoryUtilsTests {
@@ -675,4 +695,14 @@ class BeanFactoryUtilsTests {
ObjectProvider < CharSequence > stringProvider ;
}
static class PropertyRecipient {
ITestBean sfb ;
public void setSfb ( ITestBean sfb ) {
this . sfb = sfb ;
}
}
}