Skip to content

Commit 8074f93

Browse files
committed
Add missing reflection hints on Jakarta types
This commit adds reflection hints for `jakarta.inject.Provider` and ensures that hints are always contributed even if jakarta classes are not on the classpath. Fixes gh-31259
1 parent e53c2c6 commit 8074f93

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

spring-beans/src/main/java/org/springframework/beans/factory/annotation/JakartaAnnotationsRuntimeHints.java

+3-6
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,20 @@
2020

2121
import org.springframework.aot.hint.RuntimeHints;
2222
import org.springframework.aot.hint.RuntimeHintsRegistrar;
23+
import org.springframework.aot.hint.TypeReference;
2324
import org.springframework.lang.Nullable;
24-
import org.springframework.util.ClassUtils;
2525

2626
/**
2727
* {@link RuntimeHintsRegistrar} for Jakarta annotations.
28-
* <p>Hints are only registered if Jakarta inject is on the classpath.
2928
*
3029
* @author Brian Clozel
3130
*/
3231
class JakartaAnnotationsRuntimeHints implements RuntimeHintsRegistrar {
3332

3433
@Override
3534
public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) {
36-
if (ClassUtils.isPresent("jakarta.inject.Inject", classLoader)) {
37-
Stream.of("jakarta.inject.Inject", "jakarta.inject.Qualifier").forEach(annotationType ->
38-
hints.reflection().registerType(ClassUtils.resolveClassName(annotationType, classLoader)));
39-
}
35+
Stream.of("jakarta.inject.Inject", "jakarta.inject.Provider", "jakarta.inject.Qualifier").forEach(typeName ->
36+
hints.reflection().registerType(TypeReference.of(typeName)));
4037
}
4138

4239
}

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

+6
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919

2020
import jakarta.inject.Inject;
21+
import jakarta.inject.Provider;
2122
import jakarta.inject.Qualifier;
2223
import org.junit.jupiter.api.BeforeEach;
2324
import org.junit.jupiter.api.Test;
@@ -51,6 +52,11 @@ void jakartaInjectAnnotationHasHints() {
5152
assertThat(RuntimeHintsPredicates.reflection().onType(Inject.class)).accepts(this.hints);
5253
}
5354

55+
@Test
56+
void jakartaProviderAnnotationHasHints() {
57+
assertThat(RuntimeHintsPredicates.reflection().onType(Provider.class)).accepts(this.hints);
58+
}
59+
5460
@Test
5561
void jakartaQualifierAnnotationHasHints() {
5662
assertThat(RuntimeHintsPredicates.reflection().onType(Qualifier.class)).accepts(this.hints);

0 commit comments

Comments
 (0)