【问题标题】:Nullptr exception after Guice injectionGuice 注入后出现 Nullptr 异常
【发布时间】:2021-06-16 00:36:13
【问题描述】:

我对 Guice 注射有点陌生。我的项目中出现了 nullptr 异常。

我怀疑是因为我没有正确设置注入依赖。

经查,是由S3Driver.java文件中的invokeSomeMethod引起的,具体是lambdaHelper.invokeSomeMethod()

您能否提供一些关于出了什么问题的提示?

谢谢

S3Driver.java

// Constructor
public S3Driver() {
             Injector injector = createInjector(new LambdaHelperModule(), new S3Module());
             this.lambdaHelper = injector.getInstance(LambdaHelper.class);
}

...
lambdaHelper.invokeSomeMethod(); // Nullptr Exception

这是我的项目设置:

LambdaHelper.java

// Constructor
public LambdaHelper(S3Class s3Class) {
  this.s3Class = s3Class;
}

S3Class.java

...
// Constructor
public S3Class(S3Presigner p, S3Client s) {this.p = p; this.s = s;};

LambdaHelperModule.java

public LambdaHelper provideLambdaHelper() {
             S3Class s3Class = S3Class.builder()
                                         .s3Presigner(S3Presigner.builder().build())
                                         .s3Client(S3Client.builder().build())
                                         .build();
             return new LambdaHelper(s3Class);
}

S3Module.java

public S3Class provideS3Class() {
             return new S3Class(S3Presigner.builder().build(),
                                 S3Client.builder().build());
}

【问题讨论】:

标签: java nullpointerexception guice


【解决方案1】:

@Provides 添加到您的提供程序方法中

您的方法provideLambdaHelper()provideS3Class() 绝对应该使用@Provides 进行注释。这将使 Guice 知道它们应该是您的提供者,因此当您想要注入此类实例时,Guice 会调用它们。

所以你的代码应该是:

@Provides
public LambdaHelper provideLambdaHelper() {
  ...
}

@Provides
public S3Class provideS3Class() {
  ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多