2626import org .junit .jupiter .api .BeforeEach ;
2727import org .junit .jupiter .api .Test ;
2828
29+ import org .springframework .beans .factory .config .RuntimeBeanReference ;
2930import org .springframework .beans .factory .support .DefaultListableBeanFactory ;
3031import org .springframework .beans .factory .support .RootBeanDefinition ;
3132import org .springframework .beans .factory .support .StaticListableBeanFactory ;
@@ -465,9 +466,9 @@ void supportsMultipleTypesWithDefaultFactory() {
465466 lbf .registerSingleton ("sfb1" , sfb1 );
466467 lbf .registerSingleton ("sfb2" , sfb2 );
467468 lbf .registerBeanDefinition ("recipient" ,
468- new RootBeanDefinition (Recipient .class , RootBeanDefinition .AUTOWIRE_CONSTRUCTOR , false ));
469+ new RootBeanDefinition (ConstructorRecipient .class , RootBeanDefinition .AUTOWIRE_CONSTRUCTOR , false ));
469470
470- Recipient recipient = lbf .getBean ("recipient" , Recipient .class );
471+ ConstructorRecipient recipient = lbf .getBean ("recipient" , ConstructorRecipient .class );
471472 assertThat (recipient .sfb1 ).isSameAs (lbf .getBean ("sfb1" , TestBean .class ));
472473 assertThat (recipient .sfb2 ).isSameAs (lbf .getBean ("sfb2" , TestBean .class ));
473474
@@ -553,6 +554,24 @@ void testSupportsMultipleTypes(ListableBeanFactory lbf) {
553554 assertThat (lbf .getBean ("sfb2" )).isInstanceOf (String .class );
554555 }
555556
557+ @ Test
558+ void supportsMultipleTypesWithProperty () {
559+ DefaultListableBeanFactory lbf = new DefaultListableBeanFactory ();
560+ SupportsTypeSmartFactoryBean sfb = new SupportsTypeSmartFactoryBean ();
561+ lbf .registerSingleton ("sfb" , sfb );
562+
563+ RootBeanDefinition rbd1 = new RootBeanDefinition (PropertyRecipient .class );
564+ rbd1 .getPropertyValues ().add ("sfb" , new RuntimeBeanReference (ITestBean .class ));
565+ lbf .registerBeanDefinition ("recipient1" , rbd1 );
566+
567+ RootBeanDefinition rbd2 = new RootBeanDefinition (PropertyRecipient .class );
568+ rbd2 .getPropertyValues ().add ("sfb" , new RuntimeBeanReference ("sfb" , ITestBean .class ));
569+ lbf .registerBeanDefinition ("recipient2" , rbd2 );
570+
571+ assertThat (lbf .getBean ("recipient1" , PropertyRecipient .class ).sfb ).isSameAs (lbf .getBean ("sfb" , ITestBean .class ));
572+ assertThat (lbf .getBean ("recipient2" , PropertyRecipient .class ).sfb ).isSameAs (lbf .getBean ("sfb" , ITestBean .class ));
573+ }
574+
556575
557576 @ Retention (RetentionPolicy .RUNTIME )
558577 @interface ControllerAdvice {
@@ -650,9 +669,10 @@ public boolean supportsType(Class<?> type) {
650669 }
651670
652671
653- static class Recipient {
672+ static class ConstructorRecipient {
654673
655- public Recipient (ITestBean sfb1 , ITestBean sfb2 , List <ITestBean > testBeanList , List <CharSequence > stringList ,
674+ public ConstructorRecipient (ITestBean sfb1 , ITestBean sfb2 ,
675+ List <ITestBean > testBeanList , List <CharSequence > stringList ,
656676 ObjectProvider <ITestBean > testBeanProvider , ObjectProvider <CharSequence > stringProvider ) {
657677 this .sfb1 = sfb1 ;
658678 this .sfb2 = sfb2 ;
@@ -675,4 +695,14 @@ public Recipient(ITestBean sfb1, ITestBean sfb2, List<ITestBean> testBeanList, L
675695 ObjectProvider <CharSequence > stringProvider ;
676696 }
677697
698+
699+ static class PropertyRecipient {
700+
701+ ITestBean sfb ;
702+
703+ public void setSfb (ITestBean sfb ) {
704+ this .sfb = sfb ;
705+ }
706+ }
707+
678708}
0 commit comments