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