1
1
/*
2
- * Copyright 2002-2024 the original author or authors.
2
+ * Copyright 2002-2025 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
65
65
import org .springframework .beans .factory .support .DefaultListableBeanFactory ;
66
66
import org .springframework .beans .factory .support .GenericBeanDefinition ;
67
67
import org .springframework .beans .factory .support .RootBeanDefinition ;
68
+ import org .springframework .beans .testfixture .beans .DerivedTestBean ;
68
69
import org .springframework .beans .testfixture .beans .ITestBean ;
69
70
import org .springframework .beans .testfixture .beans .IndexedTestBean ;
70
71
import org .springframework .beans .testfixture .beans .NestedTestBean ;
@@ -1605,7 +1606,11 @@ void objectProviderInjectionWithPrototype() {
1605
1606
assertThat (testBeans ).containsExactly (bf .getBean ("testBean1" , TestBean .class ), bf .getBean ("testBean2" , TestBean .class ));
1606
1607
testBeans = bean .streamTestBeans ();
1607
1608
assertThat (testBeans ).containsExactly (bf .getBean ("testBean1" , TestBean .class ), bf .getBean ("testBean2" , TestBean .class ));
1608
- testBeans = bean .sortedTestBeans ();
1609
+ testBeans = bean .streamTestBeansInOrder ();
1610
+ assertThat (testBeans ).containsExactly (bf .getBean ("testBean1" , TestBean .class ), bf .getBean ("testBean2" , TestBean .class ));
1611
+ testBeans = bean .allTestBeans ();
1612
+ assertThat (testBeans ).containsExactly (bf .getBean ("testBean1" , TestBean .class ), bf .getBean ("testBean2" , TestBean .class ));
1613
+ testBeans = bean .allTestBeansInOrder ();
1609
1614
assertThat (testBeans ).containsExactly (bf .getBean ("testBean1" , TestBean .class ), bf .getBean ("testBean2" , TestBean .class ));
1610
1615
}
1611
1616
@@ -1632,7 +1637,13 @@ void objectProviderInjectionWithSingletonTarget() {
1632
1637
testBeans = bean .streamTestBeans ();
1633
1638
assertThat (testBeans ).hasSize (1 );
1634
1639
assertThat (testBeans ).contains (bf .getBean ("testBean" , TestBean .class ));
1635
- testBeans = bean .sortedTestBeans ();
1640
+ testBeans = bean .streamTestBeansInOrder ();
1641
+ assertThat (testBeans ).hasSize (1 );
1642
+ assertThat (testBeans ).contains (bf .getBean ("testBean" , TestBean .class ));
1643
+ testBeans = bean .allTestBeans ();
1644
+ assertThat (testBeans ).hasSize (1 );
1645
+ assertThat (testBeans ).contains (bf .getBean ("testBean" , TestBean .class ));
1646
+ testBeans = bean .allTestBeansInOrder ();
1636
1647
assertThat (testBeans ).hasSize (1 );
1637
1648
assertThat (testBeans ).contains (bf .getBean ("testBean" , TestBean .class ));
1638
1649
}
@@ -1656,7 +1667,11 @@ void objectProviderInjectionWithTargetNotAvailable() {
1656
1667
assertThat (testBeans ).isEmpty ();
1657
1668
testBeans = bean .streamTestBeans ();
1658
1669
assertThat (testBeans ).isEmpty ();
1659
- testBeans = bean .sortedTestBeans ();
1670
+ testBeans = bean .streamTestBeansInOrder ();
1671
+ assertThat (testBeans ).isEmpty ();
1672
+ testBeans = bean .allTestBeans ();
1673
+ assertThat (testBeans ).isEmpty ();
1674
+ testBeans = bean .allTestBeansInOrder ();
1660
1675
assertThat (testBeans ).isEmpty ();
1661
1676
}
1662
1677
@@ -1678,7 +1693,9 @@ void objectProviderInjectionWithTargetNotUnique() {
1678
1693
assertThat (bean .iterateTestBeans ()).containsExactly (testBean1 , testBean2 );
1679
1694
assertThat (bean .forEachTestBeans ()).containsExactly (testBean1 , testBean2 );
1680
1695
assertThat (bean .streamTestBeans ()).containsExactly (testBean1 , testBean2 );
1681
- assertThat (bean .sortedTestBeans ()).containsExactly (testBean1 , testBean2 );
1696
+ assertThat (bean .streamTestBeansInOrder ()).containsExactly (testBean1 , testBean2 );
1697
+ assertThat (bean .allTestBeans ()).containsExactly (testBean1 , testBean2 );
1698
+ assertThat (bean .allTestBeansInOrder ()).containsExactly (testBean1 , testBean2 );
1682
1699
}
1683
1700
1684
1701
@ Test
@@ -1706,7 +1723,9 @@ void objectProviderInjectionWithTargetPrimary() {
1706
1723
assertThat (bean .iterateTestBeans ()).containsExactly (testBean1 , testBean2 );
1707
1724
assertThat (bean .forEachTestBeans ()).containsExactly (testBean1 , testBean2 );
1708
1725
assertThat (bean .streamTestBeans ()).containsExactly (testBean1 , testBean2 );
1709
- assertThat (bean .sortedTestBeans ()).containsExactly (testBean2 , testBean1 );
1726
+ assertThat (bean .streamTestBeansInOrder ()).containsExactly (testBean2 , testBean1 );
1727
+ assertThat (bean .allTestBeans ()).containsExactly (testBean1 , testBean2 );
1728
+ assertThat (bean .allTestBeansInOrder ()).containsExactly (testBean2 , testBean1 );
1710
1729
}
1711
1730
1712
1731
@ Test
@@ -1722,8 +1741,47 @@ void objectProviderInjectionWithUnresolvedOrderedStream() {
1722
1741
bf .registerBeanDefinition ("testBean2" , tb2 );
1723
1742
1724
1743
ObjectProviderInjectionBean bean = bf .getBean ("annotatedBean" , ObjectProviderInjectionBean .class );
1725
- assertThat (bean .sortedTestBeans ()).containsExactly (bf .getBean ("testBean2" , TestBean .class ),
1744
+ assertThat (bean .streamTestBeansInOrder ()).containsExactly (bf .getBean ("testBean2" , TestBean .class ),
1745
+ bf .getBean ("testBean1" , TestBean .class ));
1746
+ assertThat (bean .allTestBeansInOrder ()).containsExactly (bf .getBean ("testBean2" , TestBean .class ),
1747
+ bf .getBean ("testBean1" , TestBean .class ));
1748
+ }
1749
+
1750
+ @ Test
1751
+ void objectProviderInjectionWithNonCandidatesInStream () {
1752
+ bf .registerBeanDefinition ("annotatedBean" , new RootBeanDefinition (ObjectProviderInjectionBean .class ));
1753
+ RootBeanDefinition tb1 = new RootBeanDefinition (TestBeanFactory .class );
1754
+ tb1 .setFactoryMethodName ("newTestBean1" );
1755
+ bf .registerBeanDefinition ("testBean1" , tb1 );
1756
+ RootBeanDefinition tb2 = new RootBeanDefinition (TestBeanFactory .class );
1757
+ tb2 .setFactoryMethodName ("newTestBean2" );
1758
+ bf .registerBeanDefinition ("testBean2" , tb2 );
1759
+ RootBeanDefinition tb3 = new RootBeanDefinition (TestBean .class );
1760
+ tb3 .setAutowireCandidate (false );
1761
+ tb3 .setLazyInit (true );
1762
+ bf .registerBeanDefinition ("testBean3" , tb3 );
1763
+ RootBeanDefinition tb4 = new RootBeanDefinition (DerivedTestBean .class );
1764
+ tb4 .setDefaultCandidate (false );
1765
+ tb4 .setLazyInit (true );
1766
+ bf .registerBeanDefinition ("testBean4" , tb4 );
1767
+
1768
+ ObjectProviderInjectionBean bean = bf .getBean ("annotatedBean" , ObjectProviderInjectionBean .class );
1769
+ assertThat (bean .streamTestBeans ()).containsExactly (bf .getBean ("testBean1" , TestBean .class ),
1770
+ bf .getBean ("testBean2" , TestBean .class ));
1771
+ assertThat (bean .streamTestBeansInOrder ()).containsExactly (bf .getBean ("testBean2" , TestBean .class ),
1726
1772
bf .getBean ("testBean1" , TestBean .class ));
1773
+ assertThat (bf .containsSingleton ("testBean3" )).isFalse ();
1774
+ assertThat (bean .plainTestBeans ()).containsExactly (bf .getBean ("testBean1" , TestBean .class ),
1775
+ bf .getBean ("testBean2" , TestBean .class ), bf .getBean ("testBean3" , TestBean .class ));
1776
+ assertThat (bean .plainTestBeansInOrder ()).containsExactly (bf .getBean ("testBean2" , TestBean .class ),
1777
+ bf .getBean ("testBean1" , TestBean .class ), bf .getBean ("testBean3" , TestBean .class ));
1778
+ assertThat (bf .containsSingleton ("testBean4" )).isFalse ();
1779
+ assertThat (bean .allTestBeans ()).containsExactly (bf .getBean ("testBean1" , TestBean .class ),
1780
+ bf .getBean ("testBean2" , TestBean .class ), bf .getBean ("testBean3" , TestBean .class ),
1781
+ bf .getBean ("testBean4" , TestBean .class ));
1782
+ assertThat (bean .allTestBeansInOrder ()).containsExactly (bf .getBean ("testBean2" , TestBean .class ),
1783
+ bf .getBean ("testBean1" , TestBean .class ), bf .getBean ("testBean3" , TestBean .class ),
1784
+ bf .getBean ("testBean4" , TestBean .class ));
1727
1785
}
1728
1786
1729
1787
@ Test
@@ -3304,9 +3362,25 @@ public List<TestBean> streamTestBeans() {
3304
3362
return this .testBean .stream ().toList ();
3305
3363
}
3306
3364
3307
- public List <TestBean > sortedTestBeans () {
3365
+ public List <TestBean > streamTestBeansInOrder () {
3308
3366
return this .testBean .orderedStream ().toList ();
3309
3367
}
3368
+
3369
+ public List <TestBean > plainTestBeans () {
3370
+ return this .testBean .stream (clazz -> !DerivedTestBean .class .isAssignableFrom (clazz )).toList ();
3371
+ }
3372
+
3373
+ public List <TestBean > plainTestBeansInOrder () {
3374
+ return this .testBean .orderedStream (clazz -> !DerivedTestBean .class .isAssignableFrom (clazz )).toList ();
3375
+ }
3376
+
3377
+ public List <TestBean > allTestBeans () {
3378
+ return this .testBean .stream (ObjectProvider .UNFILTERED ).toList ();
3379
+ }
3380
+
3381
+ public List <TestBean > allTestBeansInOrder () {
3382
+ return this .testBean .orderedStream (ObjectProvider .UNFILTERED ).toList ();
3383
+ }
3310
3384
}
3311
3385
3312
3386
0 commit comments