GraalVM 原生镜像 – 依赖注入(第 3 部分)
Posted: Sun Mar 23, 2025 8:17 am
博客
技术
这篇文章是有关 GraalVM 系列文章的第三部分。在上一篇文章中,我解释了如何使用 GraalVM 和原生镜像创建一个简单的 REST API。本系列的第一篇文章讨论了如何设置环境并开始使用。
依赖注入
对于本节,我们希望更多地转向您期望 Java EE 应用程序提供 中国号码数据 的功能。我们已经介绍了 Webservices 和使用 Spark 的基础知识。下一步我们尝试添加依赖注入。我们有两个选择:
在 Spark 之上添加 DI 框架。
切换到另一个包含 DI 的框架。
事实证明,第一种选择相当具有挑战性。不去细说,我遇到了很多与 GraalVM 不支持反射相关的问题。我使用 Google 的 Dagger 2 框架取得了最大的成功,但却无法运行本机图像。
至于切换到不同的框架,我们需要牢记两个大的限制。首先,我们不能轻易使用反射。其次,我们需要能够创建一个 fat-jar。第三,我们不能依赖外部应用服务器。这三个限制的组合已经排除了 Spring 和 CDI,它们是目前最流行的 Java 框架,它们都严重依赖反射。
有一些报告称,将 CDI 与 Standalone Weld(Weld SE)或 Thorntail 结合使用可以成功创建 fat-jar,但我们无法重现这些结果。 Pivotal 的员工正在致力于实现 GraalVM 与 Spring 5 的兼容性,但这仍处于早期开发阶段,并且似乎主要关注 Spring、Spring FU 和 JaFu/KoFu的无服务器和功能部分。
Micronaut是较新的框架之一,并且明确声明了与 GraalVM 的兼容性。尽管它还比较新,但它已经提供了与 Spring 几乎相同的功能。您可以在此处快速比较两者。
微型航天器
Micronaut 使用它自己的 CLI 工具为您生成启动项目。您可以从他们的网站获取 cli 或使用SDKman来安装它。您可能需要对 GraalVM 的版本进行一些调整才能使其正常工作。我设法回滚到 rc8 并使其稳定运行。
技术
这篇文章是有关 GraalVM 系列文章的第三部分。在上一篇文章中,我解释了如何使用 GraalVM 和原生镜像创建一个简单的 REST API。本系列的第一篇文章讨论了如何设置环境并开始使用。
依赖注入
对于本节,我们希望更多地转向您期望 Java EE 应用程序提供 中国号码数据 的功能。我们已经介绍了 Webservices 和使用 Spark 的基础知识。下一步我们尝试添加依赖注入。我们有两个选择:
在 Spark 之上添加 DI 框架。
切换到另一个包含 DI 的框架。
事实证明,第一种选择相当具有挑战性。不去细说,我遇到了很多与 GraalVM 不支持反射相关的问题。我使用 Google 的 Dagger 2 框架取得了最大的成功,但却无法运行本机图像。
至于切换到不同的框架,我们需要牢记两个大的限制。首先,我们不能轻易使用反射。其次,我们需要能够创建一个 fat-jar。第三,我们不能依赖外部应用服务器。这三个限制的组合已经排除了 Spring 和 CDI,它们是目前最流行的 Java 框架,它们都严重依赖反射。
有一些报告称,将 CDI 与 Standalone Weld(Weld SE)或 Thorntail 结合使用可以成功创建 fat-jar,但我们无法重现这些结果。 Pivotal 的员工正在致力于实现 GraalVM 与 Spring 5 的兼容性,但这仍处于早期开发阶段,并且似乎主要关注 Spring、Spring FU 和 JaFu/KoFu的无服务器和功能部分。
Micronaut是较新的框架之一,并且明确声明了与 GraalVM 的兼容性。尽管它还比较新,但它已经提供了与 Spring 几乎相同的功能。您可以在此处快速比较两者。
微型航天器
Micronaut 使用它自己的 CLI 工具为您生成启动项目。您可以从他们的网站获取 cli 或使用SDKman来安装它。您可能需要对 GraalVM 的版本进行一些调整才能使其正常工作。我设法回滚到 rc8 并使其稳定运行。