@@ -3202,6 +3202,29 @@ void nonPublicEnum() {
3202
3202
assertThat (holder .getNonPublicEnum ()).isEqualTo (NonPublicEnum .VALUE_1 );
3203
3203
}
3204
3204
3205
+ @ Test
3206
+ void mostSpecificCacheEntryForTypeMatching () {
3207
+ RootBeanDefinition bd1 = new RootBeanDefinition ();
3208
+ bd1 .setFactoryBeanName ("config" );
3209
+ bd1 .setFactoryMethodName ("create" );
3210
+ lbf .registerBeanDefinition ("config" , new RootBeanDefinition (BeanWithFactoryMethod .class ));
3211
+ lbf .registerBeanDefinition ("bd1" , bd1 );
3212
+ lbf .registerBeanDefinition ("bd2" , new RootBeanDefinition (NestedTestBean .class ));
3213
+ lbf .freezeConfiguration ();
3214
+
3215
+ String [] allBeanNames = lbf .getBeanNamesForType (Object .class );
3216
+ String [] nestedBeanNames = lbf .getBeanNamesForType (NestedTestBean .class );
3217
+ assertThat (lbf .getType ("bd1" )).isEqualTo (TestBean .class );
3218
+ assertThat (lbf .getBeanNamesForType (TestBean .class )).containsExactly ("bd1" );
3219
+ assertThat (lbf .getBeanNamesForType (DerivedTestBean .class )).isEmpty ();
3220
+ lbf .getBean ("bd1" );
3221
+ assertThat (lbf .getType ("bd1" )).isEqualTo (DerivedTestBean .class );
3222
+ assertThat (lbf .getBeanNamesForType (TestBean .class )).containsExactly ("bd1" );
3223
+ assertThat (lbf .getBeanNamesForType (DerivedTestBean .class )).containsExactly ("bd1" );
3224
+ assertThat (lbf .getBeanNamesForType (NestedTestBean .class )).isSameAs (nestedBeanNames );
3225
+ assertThat (lbf .getBeanNamesForType (Object .class )).isSameAs (allBeanNames );
3226
+ }
3227
+
3205
3228
3206
3229
private int registerBeanDefinitions (Properties p ) {
3207
3230
return registerBeanDefinitions (p , null );
@@ -3418,7 +3441,7 @@ public void setName(String name) {
3418
3441
}
3419
3442
3420
3443
public TestBean create () {
3421
- TestBean tb = new TestBean ();
3444
+ DerivedTestBean tb = new DerivedTestBean ();
3422
3445
tb .setName (this .name );
3423
3446
return tb ;
3424
3447
}
@@ -3646,11 +3669,11 @@ private static class FactoryBeanDependentBean {
3646
3669
3647
3670
private FactoryBean <?> factoryBean ;
3648
3671
3649
- public final FactoryBean <?> getFactoryBean () {
3672
+ public FactoryBean <?> getFactoryBean () {
3650
3673
return this .factoryBean ;
3651
3674
}
3652
3675
3653
- public final void setFactoryBean (final FactoryBean <?> factoryBean ) {
3676
+ public void setFactoryBean (FactoryBean <?> factoryBean ) {
3654
3677
this .factoryBean = factoryBean ;
3655
3678
}
3656
3679
}
0 commit comments