java - Guice 配置错误 没有绑定(bind)实现

标签 java dependency-injection guice lombok

我正在尝试保留单个 AmazonSNS 来访问 SNS。我编写了一个SNS模块(目前只添加了一个SNS)和一个用于发布消息的访问器。我的代码如下:

public class SNSModule extends AbstractModule {

    @Override
    protected void configure() {
    }

    @Provides
    @Named("PSSNSRegionName")
    private Regions getPSSNSRegionName(
            @Named(BeanConstants.P_S_SNS_REGION) final String regionName) {
        return Regions.fromName(regionName);
    }

    @Provides
    @Singleton
    @Named(BeanConstants.P_S_SNS)
    public AmazonSNS getPSSNS(
            @NonNull @Named("PaymentSuccessSNSRegionName") final Regions region,
            final Config config) {
        return AmazonSNSClientBuilder.standard()
                .withCredentials(new AWSCredentialsProviderImpl(config.getSnsMaterialSet()))
                .withRegion(region)
                .build();
    }

}

SNS 访问器如下:

@RequiredArgsConstructor(access = AccessLevel.PUBLIC, onConstructor = @__(@Inject))
public class SNSAccessor {

    @Named(BeanConstants.P_S_SNS)
    private final AmazonSNS snsClient;
    private static final String COLON = ":";
    private static final short ARN_LENGTH = 6;

    public PublishResult publishToSNS(@NonNull final String snsTopicArn, @NonNull final String messageToPublish) {
        try {
            String[] arnParts = snsTopicArn.split(COLON);
            Preconditions.checkArgument(
                    snsTopicArn.split(COLON).length == ARN_LENGTH,
                    "Expected arn to have 6 parts but found: " + arnParts.length
            );
            return snsClient.publish(snsTopicArn, messageToPublish);
        } catch (InternalErrorException e) {
            log.error("InternalErrorException publishing notification to SNS", e);
            throw new RetriableException(e);
        } catch (Exception e) {
            log.error("Exception publishing notification to SNS", e);
            throw new NonRetriableException(e);
        }
    }
}

我能够构建该包,但它在运行时引发了 ConfigurationException。

Caused by: com.google.inject.ConfigurationException: Guice configuration errors:

1) No implementation for com.amazonaws.services.sns.AmazonSNS was bound.
  while locating com.amazonaws.services.sns.AmazonSNS
    for parameter 0 at com.xyz.service.sns.SNSAccessor.<init>(SNSAccessor.java:29)

你能帮我找出我做错了什么吗?我已经正确安装了 main 中的 SNSModule。

最佳答案

Lombok 的 @RequiredArgsConstructoronConstructor 选项不适用于带注释的依赖项注入(inject)。您需要为这种情况显式编写一个构造函数。

关于java - Guice 配置错误 没有绑定(bind)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56576895/

相关文章:

java - Guice:绑定(bind)非直接依赖项

java - 基本弹球程序,球不会从墙上弹起

java - 在java中将多个if语句组合为一个输入

java - Guice @Nullable 注解

Symfony TwigBundle 不加载任何自定义扩展

java - 如何在没有任何 XML 和 spring 特定注释的情况下使用 JSR 330 和 Spring 作为实现?

java - 在 Guice 中访问注入(inject)的依赖项

java - Grails 应用程序中的 SMTP 邮件失败(MS Exchange 且无身份验证)

java - 错误的按钮激活

java - 从组件调用的 Autowiring 服务在使用 new 关键字调用时给出空指针