From 3086d90e7dc3bcff0cdd2e1c4c7eef401b0adc1e Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Fri, 12 Aug 2022 16:27:10 +0200 Subject: [PATCH] Add the necessary hints for use of Cglib proxies This commit expands GeneratedClassHandler to allow invocation of declared fields and methods. Generated proxies have a number of internal fields and methods that are invoked via reflection. See gh-28954 --- .../springframework/context/aot/GeneratedClassHandler.java | 4 +++- .../context/aot/GeneratedClassHandlerTests.java | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/context/aot/GeneratedClassHandler.java b/spring-context/src/main/java/org/springframework/context/aot/GeneratedClassHandler.java index d74c4bdb59..f69d4d7a72 100644 --- a/spring-context/src/main/java/org/springframework/context/aot/GeneratedClassHandler.java +++ b/spring-context/src/main/java/org/springframework/context/aot/GeneratedClassHandler.java @@ -39,7 +39,9 @@ import org.springframework.core.io.ByteArrayResource; class GeneratedClassHandler implements BiConsumer { private static final Consumer asCglibProxy = hint -> - hint.withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS); + hint.withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, + MemberCategory.INVOKE_DECLARED_METHODS, + MemberCategory.DECLARED_FIELDS); private final RuntimeHints runtimeHints; diff --git a/spring-context/src/test/java/org/springframework/context/aot/GeneratedClassHandlerTests.java b/spring-context/src/test/java/org/springframework/context/aot/GeneratedClassHandlerTests.java index 6d57fd4b6e..3a12883e75 100644 --- a/spring-context/src/test/java/org/springframework/context/aot/GeneratedClassHandlerTests.java +++ b/spring-context/src/test/java/org/springframework/context/aot/GeneratedClassHandlerTests.java @@ -54,7 +54,8 @@ class GeneratedClassHandlerTests { String className = "com.example.Test$$Proxy$$1"; this.handler.accept(className, TEST_CONTENT); assertThat(RuntimeHintsPredicates.reflection().onType(TypeReference.of(className)) - .withMemberCategory(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS)) + .withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, + MemberCategory.INVOKE_DECLARED_METHODS, MemberCategory.DECLARED_FIELDS)) .accepts(this.generationContext.getRuntimeHints()); }