@@ -2154,18 +2154,44 @@ void autowireBeanByTypePrimaryTakesPrecedenceOverPriority() {
2154
2154
}
2155
2155
2156
2156
@ Test
2157
- void beanProviderWithParentBeanFactoryReuseOrder () {
2157
+ void beanProviderWithParentBeanFactoryDetectsOrder () {
2158
2158
DefaultListableBeanFactory parentBf = new DefaultListableBeanFactory ();
2159
2159
parentBf .setDependencyComparator (AnnotationAwareOrderComparator .INSTANCE );
2160
2160
parentBf .registerBeanDefinition ("regular" , new RootBeanDefinition (TestBean .class ));
2161
2161
parentBf .registerBeanDefinition ("test" , new RootBeanDefinition (HighPriorityTestBean .class ));
2162
2162
lbf .setDependencyComparator (AnnotationAwareOrderComparator .INSTANCE );
2163
2163
lbf .setParentBeanFactory (parentBf );
2164
2164
lbf .registerBeanDefinition ("low" , new RootBeanDefinition (LowPriorityTestBean .class ));
2165
+
2165
2166
Stream <Class <?>> orderedTypes = lbf .getBeanProvider (TestBean .class ).orderedStream ().map (Object ::getClass );
2166
2167
assertThat (orderedTypes ).containsExactly (HighPriorityTestBean .class , LowPriorityTestBean .class , TestBean .class );
2167
2168
}
2168
2169
2170
+ @ Test // gh-28374
2171
+ void beanProviderWithParentBeanFactoryAndMixedOrder () {
2172
+ DefaultListableBeanFactory parentBf = new DefaultListableBeanFactory ();
2173
+ parentBf .setDependencyComparator (AnnotationAwareOrderComparator .INSTANCE );
2174
+ lbf .setDependencyComparator (AnnotationAwareOrderComparator .INSTANCE );
2175
+ lbf .setParentBeanFactory (parentBf );
2176
+
2177
+ lbf .registerSingleton ("plainTestBean" , new TestBean ());
2178
+
2179
+ RootBeanDefinition bd1 = new RootBeanDefinition (PriorityTestBeanFactory .class );
2180
+ bd1 .setFactoryMethodName ("lowPriorityTestBean" );
2181
+ lbf .registerBeanDefinition ("lowPriorityTestBean" , bd1 );
2182
+
2183
+ RootBeanDefinition bd2 = new RootBeanDefinition (PriorityTestBeanFactory .class );
2184
+ bd2 .setFactoryMethodName ("highPriorityTestBean" );
2185
+ parentBf .registerBeanDefinition ("highPriorityTestBean" , bd2 );
2186
+
2187
+ ObjectProvider <TestBean > testBeanProvider = lbf .getBeanProvider (ResolvableType .forClass (TestBean .class ));
2188
+ List <TestBean > resolved = testBeanProvider .orderedStream ().toList ();
2189
+ assertThat (resolved .size ()).isEqualTo (3 );
2190
+ assertThat (resolved .get (0 )).isSameAs (lbf .getBean ("highPriorityTestBean" ));
2191
+ assertThat (resolved .get (1 )).isSameAs (lbf .getBean ("lowPriorityTestBean" ));
2192
+ assertThat (resolved .get (2 )).isSameAs (lbf .getBean ("plainTestBean" ));
2193
+ }
2194
+
2169
2195
@ Test
2170
2196
void autowireExistingBeanByName () {
2171
2197
RootBeanDefinition bd = new RootBeanDefinition (TestBean .class );
@@ -3339,6 +3365,18 @@ private static class LowPriorityTestBean extends TestBean {
3339
3365
}
3340
3366
3341
3367
3368
+ private static class PriorityTestBeanFactory {
3369
+
3370
+ public static LowPriorityTestBean lowPriorityTestBean () {
3371
+ return new LowPriorityTestBean ();
3372
+ }
3373
+
3374
+ public static HighPriorityTestBean highPriorityTestBean () {
3375
+ return new HighPriorityTestBean ();
3376
+ }
3377
+ }
3378
+
3379
+
3342
3380
private static class NullTestBeanFactoryBean <T > implements FactoryBean <TestBean > {
3343
3381
3344
3382
@ Override
0 commit comments