IoC(控制反转)Java 在 AWS Lambda 中使用的框架
IoC (Inversion of control) Java framework for using in AWS Lambda
在我当前的项目中,我正在研究在 Java 上编写的 AWS Lambda 函数。在某些时候函数的结构变得相当复杂,有很多相关的组件,我决定使用一些 IoC framework/library 来减少紧密耦合和复杂性会更加清晰和方便。
以前我只使用 Spring 框架,但我知道它是相当高权重的东西,我担心使用 Spring 我会很快达到 Lambda 限制(包大小、执行持续时间等) ).因此,我正在寻找一些适合 AWS Lambda 限制和意识形态的替代方案。什么是我的案例的最佳选择?
尝试使用 micronaut (http://micronaut.io/)。镇上的新框架仍然有希望用于分布式环境。特别是通过在构建时执行 DI 带来了很多好处,从而减少了启动时间和很少的内存开销,因为它避免了运行时的反射。值得一试!
任何使用代码生成的 IoC 容器都应该是不错的选择。 Dagger 是一个例子。
但是,根据您的 lambda 表达式的具体作用,Spring 仍然是一个合适的选择。
- 例如,与总共 5 分钟 运行 时间相比,额外的 15 秒来初始化上下文可以忽略不计。如果您的 lambda 被多次调用,现有的 lambda 实例很可能会被重用,这意味着您可以重用现有的 Spring 上下文并完全避免开销。
- 另一方面,对处理 API 网关请求的 lambda 使用 Spring 并不是最好的主意(尽管 AWS 提供了 nice library 使 Spring MVC lambda 环境中的应用程序 运行),因为典型的期望是响应应该在 <1 秒内到达(如果您只需要 15 秒来初始化上下文,这肯定是不可能的)
你可以试试hk2 (https://javaee.github.io/hk2/)。它专门用于轻量级 IoC,并具有许多有用的安全性和 AOP 功能,可能对您有用。它还可以帮助降低 start-up/classloading 成本,因为服务仅在请求时(通常)实例化。希望你能找到你要找的东西!
作为另一个选择,我找到了 Google Guice - lightweight dependency injection framework that also supports JSR-330 specification。
我发现的另一个不错的选择 - Quarkus framework,它具有面向编译时的依赖项注入,提供使用 GraalVM 编译本机应用程序的能力,并具有用于轻松创建 Lambda 函数的扩展。
在我当前的项目中,我正在研究在 Java 上编写的 AWS Lambda 函数。在某些时候函数的结构变得相当复杂,有很多相关的组件,我决定使用一些 IoC framework/library 来减少紧密耦合和复杂性会更加清晰和方便。
以前我只使用 Spring 框架,但我知道它是相当高权重的东西,我担心使用 Spring 我会很快达到 Lambda 限制(包大小、执行持续时间等) ).因此,我正在寻找一些适合 AWS Lambda 限制和意识形态的替代方案。什么是我的案例的最佳选择?
尝试使用 micronaut (http://micronaut.io/)。镇上的新框架仍然有希望用于分布式环境。特别是通过在构建时执行 DI 带来了很多好处,从而减少了启动时间和很少的内存开销,因为它避免了运行时的反射。值得一试!
任何使用代码生成的 IoC 容器都应该是不错的选择。 Dagger 是一个例子。
但是,根据您的 lambda 表达式的具体作用,Spring 仍然是一个合适的选择。
- 例如,与总共 5 分钟 运行 时间相比,额外的 15 秒来初始化上下文可以忽略不计。如果您的 lambda 被多次调用,现有的 lambda 实例很可能会被重用,这意味着您可以重用现有的 Spring 上下文并完全避免开销。
- 另一方面,对处理 API 网关请求的 lambda 使用 Spring 并不是最好的主意(尽管 AWS 提供了 nice library 使 Spring MVC lambda 环境中的应用程序 运行),因为典型的期望是响应应该在 <1 秒内到达(如果您只需要 15 秒来初始化上下文,这肯定是不可能的)
你可以试试hk2 (https://javaee.github.io/hk2/)。它专门用于轻量级 IoC,并具有许多有用的安全性和 AOP 功能,可能对您有用。它还可以帮助降低 start-up/classloading 成本,因为服务仅在请求时(通常)实例化。希望你能找到你要找的东西!
作为另一个选择,我找到了 Google Guice - lightweight dependency injection framework that also supports JSR-330 specification。
我发现的另一个不错的选择 - Quarkus framework,它具有面向编译时的依赖项注入,提供使用 GraalVM 编译本机应用程序的能力,并具有用于轻松创建 Lambda 函数的扩展。