Guice 注入后出现 Nullptr 异常
Nullptr exception after Guice injection
我对 Guice 注入有点陌生。我的项目中出现了 nullptr 异常。
我怀疑是因为我没有正确设置Injecting dependencies
经查,是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());
}
将 @Provides
添加到您的提供者方法中
你的方法 provideLambdaHelper()
和 provideS3Class()
绝对应该用 @Provides
注释。这将使 Guice 知道他们应该是您的提供者,因此当您想要注入此类实例时,Guice 会调用他们。
所以你的代码应该是:
@Provides
public LambdaHelper provideLambdaHelper() {
...
}
和
@Provides
public S3Class provideS3Class() {
...
}
我对 Guice 注入有点陌生。我的项目中出现了 nullptr 异常。
我怀疑是因为我没有正确设置Injecting dependencies
经查,是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());
}
将 @Provides
添加到您的提供者方法中
你的方法 provideLambdaHelper()
和 provideS3Class()
绝对应该用 @Provides
注释。这将使 Guice 知道他们应该是您的提供者,因此当您想要注入此类实例时,Guice 会调用他们。
所以你的代码应该是:
@Provides
public LambdaHelper provideLambdaHelper() {
...
}
和
@Provides
public S3Class provideS3Class() {
...
}