使用Spring自动装配依赖项的AWS Lambda函数

IT小君   2023-09-16T19:48:09

当在Amazon AWS Lambda中执行代码时,我的@autowired Spring依赖项为null。如果没有加载上下文,这是有道理的,但我认为SpringBeanAutowiringSupport会有所帮助。如何在Amazon Lambda中正确注入依赖项?

这是我的代码,autowired字段为null,但其他方面都正常工作(如果我用new替换autowired):

@Component
public class ApplicationEventHandler {

@Autowired
private Foo foo;


         public ApplicationEventHandler() {
             logger.info("我确定构造函数正在被调用");
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
             //似乎没有帮助
         }

         public void deliveryFailedPermanentlyHandler(SNSEvent event, Context context) throws IOException {
             foo.doStuff() // 导致NPE

         }

提前感谢!

评论(2)
IT小君

这个项目在github上提供了一个模板,它很好地满足了我想做的事情:

https://github.com/cagataygurturk/aws-lambda-java-boilerplate

2023-09-16T19:48:14   回复
IT小君

AWS Lambda最佳实践笔记讨论了DI:

尽量降低依赖复杂性。更倾向于在执行上下文启动时加载快速的简单框架。例如,更倾向于使用简单的Java依赖注入(IoC)框架,如DaggerGuice,而不是更复杂的框架,如Spring Framework

所以我建议您使用Dagger 2(因为Square的Dagger 1.x已经被弃用)。它提供以下好处:

  • 轻量级框架,与很少的集成、Java接口/注解配置和编译时生成的绑定;
  • 非常小的体积;
  • 尽早失败(在编译时而不是运行时);
  • 性能-与手写代码一样快,并且无需围绕框架编码。
2023-09-16T19:48:29   回复