26
26
import org .junit .jupiter .api .BeforeEach ;
27
27
import org .junit .jupiter .api .Test ;
28
28
29
+ import org .springframework .beans .factory .config .RuntimeBeanReference ;
29
30
import org .springframework .beans .factory .support .DefaultListableBeanFactory ;
30
31
import org .springframework .beans .factory .support .RootBeanDefinition ;
31
32
import org .springframework .beans .factory .support .StaticListableBeanFactory ;
@@ -465,9 +466,9 @@ void supportsMultipleTypesWithDefaultFactory() {
465
466
lbf .registerSingleton ("sfb1" , sfb1 );
466
467
lbf .registerSingleton ("sfb2" , sfb2 );
467
468
lbf .registerBeanDefinition ("recipient" ,
468
- new RootBeanDefinition (Recipient .class , RootBeanDefinition .AUTOWIRE_CONSTRUCTOR , false ));
469
+ new RootBeanDefinition (ConstructorRecipient .class , RootBeanDefinition .AUTOWIRE_CONSTRUCTOR , false ));
469
470
470
- Recipient recipient = lbf .getBean ("recipient" , Recipient .class );
471
+ ConstructorRecipient recipient = lbf .getBean ("recipient" , ConstructorRecipient .class );
471
472
assertThat (recipient .sfb1 ).isSameAs (lbf .getBean ("sfb1" , TestBean .class ));
472
473
assertThat (recipient .sfb2 ).isSameAs (lbf .getBean ("sfb2" , TestBean .class ));
473
474
@@ -553,6 +554,24 @@ void testSupportsMultipleTypes(ListableBeanFactory lbf) {
553
554
assertThat (lbf .getBean ("sfb2" )).isInstanceOf (String .class );
554
555
}
555
556
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
+
556
575
557
576
@ Retention (RetentionPolicy .RUNTIME )
558
577
@interface ControllerAdvice {
@@ -650,9 +669,10 @@ public boolean supportsType(Class<?> type) {
650
669
}
651
670
652
671
653
- static class Recipient {
672
+ static class ConstructorRecipient {
654
673
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 ,
656
676
ObjectProvider <ITestBean > testBeanProvider , ObjectProvider <CharSequence > stringProvider ) {
657
677
this .sfb1 = sfb1 ;
658
678
this .sfb2 = sfb2 ;
@@ -675,4 +695,14 @@ public Recipient(ITestBean sfb1, ITestBean sfb2, List<ITestBean> testBeanList, L
675
695
ObjectProvider <CharSequence > stringProvider ;
676
696
}
677
697
698
+
699
+ static class PropertyRecipient {
700
+
701
+ ITestBean sfb ;
702
+
703
+ public void setSfb (ITestBean sfb ) {
704
+ this .sfb = sfb ;
705
+ }
706
+ }
707
+
678
708
}
0 commit comments