Skip to content

Commit b4fc794

Browse files
committed
Make javax.inject.Provider impl invisible for nested class introspection
Issue: SPR-17014
1 parent 490302e commit b4fc794

File tree

1 file changed

+40
-36
lines changed

1 file changed

+40
-36
lines changed

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

Lines changed: 40 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,7 +1052,7 @@ else if (ObjectFactory.class == descriptor.getDependencyType() ||
10521052
return new DependencyObjectProvider(descriptor, requestingBeanName);
10531053
}
10541054
else if (javaxInjectProviderClass == descriptor.getDependencyType()) {
1055-
return new Jsr330ProviderFactory().createDependencyProvider(descriptor, requestingBeanName);
1055+
return new Jsr330Factory().createDependencyProvider(descriptor, requestingBeanName);
10561056
}
10571057
else {
10581058
Object result = getAutowireCandidateResolver().getLazyResolutionProxyIfNecessary(
@@ -1247,7 +1247,7 @@ private Comparator<Object> adaptDependencyComparator(Map<String, Object> matchin
12471247
}
12481248
}
12491249

1250-
private FactoryAwareOrderSourceProvider createFactoryAwareOrderSourceProvider(Map<String, Object> beans) {
1250+
private OrderComparator.OrderSourceProvider createFactoryAwareOrderSourceProvider(Map<String, Object> beans) {
12511251
IdentityHashMap<Object, String> instancesToBeanNames = new IdentityHashMap<>();
12521252
beans.forEach((beanName, instance) -> instancesToBeanNames.put(instance, beanName));
12531253
return new FactoryAwareOrderSourceProvider(instancesToBeanNames);
@@ -1614,6 +1614,29 @@ private Object readResolve() {
16141614
}
16151615

16161616

1617+
/**
1618+
* A dependency descriptor marker for nested elements.
1619+
*/
1620+
private static class NestedDependencyDescriptor extends DependencyDescriptor {
1621+
1622+
public NestedDependencyDescriptor(DependencyDescriptor original) {
1623+
super(original);
1624+
increaseNestingLevel();
1625+
}
1626+
}
1627+
1628+
1629+
/**
1630+
* A dependency descriptor marker for multiple elements.
1631+
*/
1632+
private static class MultiElementDescriptor extends NestedDependencyDescriptor {
1633+
1634+
public MultiElementDescriptor(DependencyDescriptor original) {
1635+
super(original);
1636+
}
1637+
}
1638+
1639+
16171640
/**
16181641
* Serializable ObjectFactory/ObjectProvider for lazy resolution of a dependency.
16191642
*/
@@ -1718,29 +1741,27 @@ protected Object getValue() throws BeansException {
17181741

17191742

17201743
/**
1721-
* Serializable ObjectFactory for lazy resolution of a dependency.
1744+
* Separate inner class for avoiding a hard dependency on the {@code javax.inject} API.
1745+
* Actual {@code javax.inject.Provider} implementation is nested here in order to make it
1746+
* invisible for Graal's introspection of DefaultListableBeanFactory's nested classes.
17221747
*/
1723-
private class Jsr330DependencyProvider extends DependencyObjectProvider implements Provider<Object> {
1724-
1725-
public Jsr330DependencyProvider(DependencyDescriptor descriptor, @Nullable String beanName) {
1726-
super(descriptor, beanName);
1727-
}
1748+
private class Jsr330Factory implements Serializable {
17281749

1729-
@Override
1730-
@Nullable
1731-
public Object get() throws BeansException {
1732-
return getValue();
1750+
public Object createDependencyProvider(DependencyDescriptor descriptor, @Nullable String beanName) {
1751+
return new Jsr330Provider(descriptor, beanName);
17331752
}
1734-
}
17351753

1754+
private class Jsr330Provider extends DependencyObjectProvider implements Provider<Object> {
17361755

1737-
/**
1738-
* Separate inner class for avoiding a hard dependency on the {@code javax.inject} API.
1739-
*/
1740-
private class Jsr330ProviderFactory {
1756+
public Jsr330Provider(DependencyDescriptor descriptor, @Nullable String beanName) {
1757+
super(descriptor, beanName);
1758+
}
17411759

1742-
public Object createDependencyProvider(DependencyDescriptor descriptor, @Nullable String beanName) {
1743-
return new Jsr330DependencyProvider(descriptor, beanName);
1760+
@Override
1761+
@Nullable
1762+
public Object get() throws BeansException {
1763+
return getValue();
1764+
}
17441765
}
17451766
}
17461767

@@ -1791,21 +1812,4 @@ private RootBeanDefinition getRootBeanDefinition(@Nullable String beanName) {
17911812
}
17921813
}
17931814

1794-
1795-
private static class NestedDependencyDescriptor extends DependencyDescriptor {
1796-
1797-
public NestedDependencyDescriptor(DependencyDescriptor original) {
1798-
super(original);
1799-
increaseNestingLevel();
1800-
}
1801-
}
1802-
1803-
1804-
private static class MultiElementDescriptor extends NestedDependencyDescriptor {
1805-
1806-
public MultiElementDescriptor(DependencyDescriptor original) {
1807-
super(original);
1808-
}
1809-
}
1810-
18111815
}

0 commit comments

Comments
 (0)