【问题标题】:IoC (Inversion of control) Java framework for using in AWS Lambda用于 AWS Lambda 的 IoC(控制反转)Java 框架
【发布时间】:2019-02-03 05:53:43
【问题描述】:

在我当前的项目中,我正在研究用 Java 编写的 AWS Lambda 函数。有时函数的结构变得相当复杂,相关的组件也变得很多,我决定使用一些 IoC 框架/库来减少紧密耦合和复杂性会更加清晰和方便。

以前我只使用 Spring Framework,但我知道它是相当重量级的东西,我担心使用 Spring 我会很快达到 Lambda 限制(包大小、执行持续时间等)。因此,我正在寻找一些适合 AWS Lambda 限制和意识形态的替代方案。对于我的情况,最好的选择是什么?

【问题讨论】:

  • 您可以在没有任何库的情况下进行控制反转。如果 A 类依赖于 B 类,只需将 B 对象作为参数传递给 A 构造函数,瞧。

标签: java spring amazon-web-services aws-lambda inversion-of-control


【解决方案1】:

尝试使用 micronaut (http://micronaut.io/)。镇上的新框架仍然有望用于分布式环境。特别是通过在构建时执行 DI 带来了很多好处,从而减少了启动时间和很少的内存开销,因为它避免了运行时的反射。值得一试!

【讨论】:

    【解决方案2】:

    任何使用代码生成的 IoC 容器都应该是不错的选择。 Dagger 就是一个例子。

    但是,根据您的 lambda 的具体用途,Spring 仍然是一个合适的选择。

    • 例如,与总共 5 分钟的运行时间相比,额外的 15 秒初始化上下文是可以忽略的。如果您的 lambda 被多次调用,现有的 lambda 实例很可能会被重用,这意味着您可以重用现有的 Spring 上下文并完全避免开销。
    • 另一方面,使用 Spring 处理 API 网关请求的 lambda 并不是最好的主意(尽管 AWS 提供了一个 nice library 使 Spring MVC 应用程序在 lambda 环境中运行),因为典型的期望是响应应该进入

    【讨论】:

      【解决方案3】:

      你可以试试 hk2 (https://javaee.github.io/hk2/)。它专门用于轻量级 IoC,并具有许多有用的安全性和 AOP 功能,可能对您有用。它还可以帮助降低启动/类加载成本,因为服务仅在请求时(通常)才被实例化。希望你能找到你要找的东西!

      【讨论】:

        【解决方案4】:

        作为另一种选择,我发现 Google Guice - 也支持 JSR-330 specification 的轻量级依赖注入框架。

        【讨论】:

          【解决方案5】:

          我发现的另一个不错的选择 - Quarkus framework,它具有面向编译时的依赖注入,提供使用 GraalVM 编译本机应用程序的能力,并具有易于创建 Lambda 函数的扩展。

          【讨论】:

            猜你喜欢
            • 2015-07-30
            • 1970-01-01
            • 2014-03-05
            • 1970-01-01
            • 2022-06-24
            • 2011-05-27
            • 2020-01-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多