Skip to content

Commit 3a4b5c2

Browse files
committed
RootBeanDefinition publicly exposes target type as ResolvableType
Issue: SPR-17028
1 parent a1d2097 commit 3a4b5c2

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

spring-beans/src/main/java/org/springframework/beans/factory/support/RootBeanDefinition.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,19 @@ public Class<?> getTargetType() {
322322
return (targetType != null ? targetType.resolve() : null);
323323
}
324324

325+
/**
326+
* Return a {@link ResolvableType} for this bean definition,
327+
* either from runtime-cached type information or from configuration-time
328+
* {@link #setTargetType(ResolvableType)} or {@link #setBeanClass(Class)}.
329+
* @since 5.1
330+
* @see #getTargetType()
331+
* @see #getBeanClass()
332+
*/
333+
public ResolvableType getResolvableType() {
334+
ResolvableType targetType = this.targetType;
335+
return (targetType != null ? targetType : ResolvableType.forClass(getBeanClass()));
336+
}
337+
325338
/**
326339
* Specify a factory method name that refers to a non-overloaded method.
327340
*/

spring-beans/src/test/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessorTests.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2363,6 +2363,7 @@ public void testGenericsBasedInjectionIntoMatchingTypeVariable() {
23632363
GenericInterface1Impl bean1 = (GenericInterface1Impl) bf.getBean("bean1");
23642364
GenericInterface2Impl bean2 = (GenericInterface2Impl) bf.getBean("bean2");
23652365
assertSame(bean2, bean1.gi2);
2366+
assertEquals(ResolvableType.forClass(GenericInterface1Impl.class), bd.getResolvableType());
23662367
}
23672368

23682369
@Test
@@ -2381,6 +2382,7 @@ public void testGenericsBasedInjectionIntoUnresolvedTypeVariable() {
23812382
GenericInterface1Impl bean1 = (GenericInterface1Impl) bf.getBean("bean1");
23822383
GenericInterface2Impl bean2 = (GenericInterface2Impl) bf.getBean("bean2");
23832384
assertSame(bean2, bean1.gi2);
2385+
assertEquals(ResolvableType.forClass(GenericInterface1Impl.class), bd.getResolvableType());
23842386
}
23852387

23862388
@Test
@@ -2401,7 +2403,6 @@ public void testGenericsBasedInjectionIntoTypeVariableSelectingBestMatch() {
24012403
GenericInterface1Impl bean1 = (GenericInterface1Impl) bf.getBean("bean1");
24022404
GenericInterface2Impl bean2 = (GenericInterface2Impl) bf.getBean("bean2");
24032405
assertSame(bean2, bean1.gi2);
2404-
24052406
assertArrayEquals(new String[] {"bean1"}, bf.getBeanNamesForType(ResolvableType.forClassWithGenerics(GenericInterface1.class, String.class)));
24062407
assertArrayEquals(new String[] {"bean2"}, bf.getBeanNamesForType(ResolvableType.forClassWithGenerics(GenericInterface2.class, String.class)));
24072408
}
@@ -2428,7 +2429,7 @@ public void testGenericsBasedInjectionIntoTypeVariableSelectingBestMatchAgainstF
24282429
}
24292430

24302431
@Test
2431-
public void testGenericsBasedInjectionWithBeanDefinitionTargetResolvableType() throws Exception {
2432+
public void testGenericsBasedInjectionWithBeanDefinitionTargetResolvableType() {
24322433
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
24332434
bf.setAutowireCandidateResolver(new QualifierAnnotationAutowireCandidateResolver());
24342435
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor();
@@ -2443,6 +2444,8 @@ public void testGenericsBasedInjectionWithBeanDefinitionTargetResolvableType() t
24432444
bf.registerBeanDefinition("bean3", new RootBeanDefinition(MultiGenericFieldInjection.class));
24442445

24452446
assertEquals("bean1 a bean2 123", bf.getBean("bean3").toString());
2447+
assertEquals(ResolvableType.forClassWithGenerics(GenericInterface2Bean.class, String.class), bd1.getResolvableType());
2448+
assertEquals(ResolvableType.forClassWithGenerics(GenericInterface2Bean.class, Integer.class), bd2.getResolvableType());
24462449
}
24472450

24482451
@Test

0 commit comments

Comments
 (0)