diff --git a/spring-core/spring-core.gradle b/spring-core/spring-core.gradle index d9ce7201e8d..c80a60849fa 100644 --- a/spring-core/spring-core.gradle +++ b/spring-core/spring-core.gradle @@ -60,6 +60,7 @@ dependencies { optional("io.smallrye.reactive:mutiny") optional("io.netty:netty-buffer") testImplementation("jakarta.annotation:jakarta.annotation-api") + testImplementation("jakarta.inject:jakarta.inject-api") testImplementation("jakarta.xml.bind:jakarta.xml.bind-api") testImplementation("com.google.code.findbugs:jsr305") testImplementation("com.fasterxml.woodstox:woodstox-core") diff --git a/spring-core/src/main/java/org/springframework/aot/hint/support/CoreAnnotationsRuntimeHintsRegistrar.java b/spring-core/src/main/java/org/springframework/aot/hint/support/CoreAnnotationsRuntimeHintsRegistrar.java index a8ad865e823..30480b3c5ec 100644 --- a/spring-core/src/main/java/org/springframework/aot/hint/support/CoreAnnotationsRuntimeHintsRegistrar.java +++ b/spring-core/src/main/java/org/springframework/aot/hint/support/CoreAnnotationsRuntimeHintsRegistrar.java @@ -23,6 +23,7 @@ import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.core.annotation.AliasFor; import org.springframework.core.annotation.Order; import org.springframework.lang.Nullable; +import org.springframework.util.ClassUtils; /** * {@link RuntimeHintsRegistrar} for core annotations. @@ -36,6 +37,10 @@ class CoreAnnotationsRuntimeHintsRegistrar implements RuntimeHintsRegistrar { public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) { Stream.of(AliasFor.class, Order.class).forEach(annotationType -> RuntimeHintsUtils.registerAnnotation(hints, annotationType)); + if (ClassUtils.isPresent("jakarta.inject.Inject", classLoader)) { + Stream.of("jakarta.inject.Inject", "jakarta.inject.Qualifier").forEach(annotationType -> + RuntimeHintsUtils.registerAnnotation(hints, ClassUtils.resolveClassName(annotationType, classLoader))); + } } } diff --git a/spring-core/src/test/java/org/springframework/aot/hint/support/CoreAnnotationsRuntimeHintsRegistrarTests.java b/spring-core/src/test/java/org/springframework/aot/hint/support/CoreAnnotationsRuntimeHintsRegistrarTests.java index d21f25fe8c2..94d63183381 100644 --- a/spring-core/src/test/java/org/springframework/aot/hint/support/CoreAnnotationsRuntimeHintsRegistrarTests.java +++ b/spring-core/src/test/java/org/springframework/aot/hint/support/CoreAnnotationsRuntimeHintsRegistrarTests.java @@ -16,6 +16,8 @@ package org.springframework.aot.hint.support; +import jakarta.inject.Inject; +import jakarta.inject.Qualifier; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -59,4 +61,16 @@ class CoreAnnotationsRuntimeHintsRegistrarTests { .withMemberCategory(MemberCategory.INVOKE_DECLARED_METHODS)).accepts(this.hints); } + @Test + void jakartaInjectAnnotationHasHints() { + assertThat(RuntimeHintsPredicates.reflection().onType(Inject.class) + .withMemberCategory(MemberCategory.INVOKE_DECLARED_METHODS)).accepts(this.hints); + } + + @Test + void jakartaQualifierAnnotationHasHints() { + assertThat(RuntimeHintsPredicates.reflection().onType(Qualifier.class) + .withMemberCategory(MemberCategory.INVOKE_DECLARED_METHODS)).accepts(this.hints); + } + }