From af5e6de4e4c55dab769479e4ea336886338296cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Fri, 2 Sep 2022 17:43:29 +0200 Subject: [PATCH] Update to leverage @RegisterReflectionForBinding See spring-projects/spring-framework#28979 --- .../DataRedisReactiveApplication.java | 20 +++------------- .../com/example/quartz/QuartzApplication.java | 23 ------------------- .../example/quartz/QuartzConfiguration.java | 2 ++ .../java/com/example/resttemplate/CLR.java | 6 ++--- .../com/example/resttemplate/DataDto.java | 15 ------------ .../native-image/native-image.properties | 1 + .../main/java/com/example/webclient/CLR.java | 6 ++--- .../java/com/example/webclient/DataDto.java | 15 ------------ 8 files changed, 10 insertions(+), 78 deletions(-) create mode 100644 rest-template/src/main/resources/META-INF/native-image/native-image.properties diff --git a/data-redis-reactive/src/main/java/com/example/data/redis/reactive/DataRedisReactiveApplication.java b/data-redis-reactive/src/main/java/com/example/data/redis/reactive/DataRedisReactiveApplication.java index e0323910..40c9c002 100644 --- a/data-redis-reactive/src/main/java/com/example/data/redis/reactive/DataRedisReactiveApplication.java +++ b/data-redis-reactive/src/main/java/com/example/data/redis/reactive/DataRedisReactiveApplication.java @@ -1,17 +1,14 @@ package com.example.data.redis.reactive; -import com.example.data.redis.reactive.DataRedisReactiveApplication.PersonRuntimeHints; - -import org.springframework.aot.hint.RuntimeHints; -import org.springframework.aot.hint.RuntimeHintsRegistrar; +import org.springframework.aot.hint.annotation.RegisterReflectionForBinding; import org.springframework.aot.smoketest.thirdpartyhints.NettyRuntimeHints; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ImportRuntimeHints; -import org.springframework.context.aot.BindingReflectionHintsRegistrar; @SpringBootApplication -@ImportRuntimeHints({ NettyRuntimeHints.class, PersonRuntimeHints.class }) +@ImportRuntimeHints(NettyRuntimeHints.class) +@RegisterReflectionForBinding(Person.class) public class DataRedisReactiveApplication { public static void main(String[] args) throws InterruptedException { @@ -19,15 +16,4 @@ public class DataRedisReactiveApplication { Thread.currentThread().join(); // To be able to measure memory consumption } - static class PersonRuntimeHints implements RuntimeHintsRegistrar { - - private final BindingReflectionHintsRegistrar bindingReflectionHintsRegistrar = new BindingReflectionHintsRegistrar(); - - @Override - public void registerHints(RuntimeHints hints, ClassLoader classLoader) { - this.bindingReflectionHintsRegistrar.registerReflectionHints(hints.reflection(), Person.class); - } - - } - } diff --git a/quartz/src/main/java/com/example/quartz/QuartzApplication.java b/quartz/src/main/java/com/example/quartz/QuartzApplication.java index e3f605dc..803210f1 100644 --- a/quartz/src/main/java/com/example/quartz/QuartzApplication.java +++ b/quartz/src/main/java/com/example/quartz/QuartzApplication.java @@ -1,19 +1,9 @@ package com.example.quartz; -import java.util.function.Consumer; - -import com.example.quartz.QuartzApplication.QuartzApplicationHints; - -import org.springframework.aot.hint.MemberCategory; -import org.springframework.aot.hint.RuntimeHints; -import org.springframework.aot.hint.RuntimeHintsRegistrar; -import org.springframework.aot.hint.TypeHint.Builder; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.ImportRuntimeHints; @SpringBootApplication -@ImportRuntimeHints({ QuartzApplicationHints.class }) public class QuartzApplication { public static void main(String[] args) throws InterruptedException { @@ -21,17 +11,4 @@ public class QuartzApplication { Thread.currentThread().join(); // To be able to measure memory consumption } - static class QuartzApplicationHints implements RuntimeHintsRegistrar { - - private static final Consumer ALL_REFLECTION_HINTS = (builder) -> builder.withMembers( - MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.INVOKE_PUBLIC_METHODS, - MemberCategory.DECLARED_FIELDS); - - @Override - public void registerHints(RuntimeHints hints, ClassLoader classLoader) { - hints.reflection().registerType(SimpleJob.class, ALL_REFLECTION_HINTS); - } - - } - } diff --git a/quartz/src/main/java/com/example/quartz/QuartzConfiguration.java b/quartz/src/main/java/com/example/quartz/QuartzConfiguration.java index 1b894fbb..f592be40 100644 --- a/quartz/src/main/java/com/example/quartz/QuartzConfiguration.java +++ b/quartz/src/main/java/com/example/quartz/QuartzConfiguration.java @@ -6,6 +6,7 @@ import org.quartz.SimpleScheduleBuilder; import org.quartz.Trigger; import org.quartz.TriggerBuilder; +import org.springframework.aot.hint.annotation.RegisterReflectionForBinding; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -13,6 +14,7 @@ import org.springframework.context.annotation.Configuration; class QuartzConfiguration { @Bean + @RegisterReflectionForBinding(SimpleJob.class) public JobDetail simpleJobDetail() { return JobBuilder.newJob(SimpleJob.class).withIdentity("simpleJob").usingJobData("greeting", "Hello world!") .storeDurably().build(); diff --git a/rest-template/src/main/java/com/example/resttemplate/CLR.java b/rest-template/src/main/java/com/example/resttemplate/CLR.java index 750a8c48..a16e52a9 100644 --- a/rest-template/src/main/java/com/example/resttemplate/CLR.java +++ b/rest-template/src/main/java/com/example/resttemplate/CLR.java @@ -3,16 +3,14 @@ package com.example.resttemplate; import java.net.URI; import java.time.Duration; -import com.example.resttemplate.DataDto.DataDtoRuntimeHints; - +import org.springframework.aot.hint.annotation.RegisterReflectionForBinding; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.web.client.RestTemplateBuilder; -import org.springframework.context.annotation.ImportRuntimeHints; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; @Component -@ImportRuntimeHints(DataDtoRuntimeHints.class) +@RegisterReflectionForBinding(DataDto.class) class CLR implements CommandLineRunner { private final RestTemplateBuilder restTemplateBuilder; diff --git a/rest-template/src/main/java/com/example/resttemplate/DataDto.java b/rest-template/src/main/java/com/example/resttemplate/DataDto.java index 4d7a1128..39442b47 100644 --- a/rest-template/src/main/java/com/example/resttemplate/DataDto.java +++ b/rest-template/src/main/java/com/example/resttemplate/DataDto.java @@ -1,9 +1,5 @@ package com.example.resttemplate; -import org.springframework.aot.hint.RuntimeHints; -import org.springframework.aot.hint.RuntimeHintsRegistrar; -import org.springframework.context.aot.BindingReflectionHintsRegistrar; - public class DataDto { private String url; @@ -34,15 +30,4 @@ public class DataDto { return "DataDto{" + "url='" + url + '\'' + ", method='" + method + '\'' + '}'; } - static class DataDtoRuntimeHints implements RuntimeHintsRegistrar { - - private final BindingReflectionHintsRegistrar bindingReflectionHintsRegistrar = new BindingReflectionHintsRegistrar(); - - @Override - public void registerHints(RuntimeHints hints, ClassLoader classLoader) { - this.bindingReflectionHintsRegistrar.registerReflectionHints(hints.reflection(), DataDto.class); - } - - } - } diff --git a/rest-template/src/main/resources/META-INF/native-image/native-image.properties b/rest-template/src/main/resources/META-INF/native-image/native-image.properties new file mode 100644 index 00000000..db5ebaa5 --- /dev/null +++ b/rest-template/src/main/resources/META-INF/native-image/native-image.properties @@ -0,0 +1 @@ +Args = --enable-url-protocols=http,https \ No newline at end of file diff --git a/webclient/src/main/java/com/example/webclient/CLR.java b/webclient/src/main/java/com/example/webclient/CLR.java index bb765868..49e3f41d 100644 --- a/webclient/src/main/java/com/example/webclient/CLR.java +++ b/webclient/src/main/java/com/example/webclient/CLR.java @@ -2,16 +2,14 @@ package com.example.webclient; import java.time.Duration; -import com.example.webclient.DataDto.DataDtoRuntimeHints; - +import org.springframework.aot.hint.annotation.RegisterReflectionForBinding; import org.springframework.boot.CommandLineRunner; -import org.springframework.context.annotation.ImportRuntimeHints; import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient.Builder; @Component -@ImportRuntimeHints(DataDtoRuntimeHints.class) +@RegisterReflectionForBinding(DataDto.class) class CLR implements CommandLineRunner { private final Builder webClientBuilder; diff --git a/webclient/src/main/java/com/example/webclient/DataDto.java b/webclient/src/main/java/com/example/webclient/DataDto.java index 9a6f8343..4e9e45ae 100644 --- a/webclient/src/main/java/com/example/webclient/DataDto.java +++ b/webclient/src/main/java/com/example/webclient/DataDto.java @@ -1,9 +1,5 @@ package com.example.webclient; -import org.springframework.aot.hint.RuntimeHints; -import org.springframework.aot.hint.RuntimeHintsRegistrar; -import org.springframework.context.aot.BindingReflectionHintsRegistrar; - public class DataDto { private String url; @@ -34,15 +30,4 @@ public class DataDto { return "DataDto{" + "url='" + url + '\'' + ", method='" + method + '\'' + '}'; } - static class DataDtoRuntimeHints implements RuntimeHintsRegistrar { - - private final BindingReflectionHintsRegistrar bindingReflectionHintsRegistrar = new BindingReflectionHintsRegistrar(); - - @Override - public void registerHints(RuntimeHints hints, ClassLoader classLoader) { - this.bindingReflectionHintsRegistrar.registerReflectionHints(hints.reflection(), DataDto.class); - } - - } - }