Spring Boot 中自动连接时的空指针

Null pointer when auto-wiring in Spring Boot

寻找自动连接外部 sdk 的标准是什么 class 我正在尝试这种方式但得到一个空指针.. 我在 spring 引导项目中使用 AmazonDynamoDBClient。所以我想我的配置 class 是这样的


@Configuration
public class DynamoDBClientBuilder {

    public AmazonDynamoDB amazonDynamoDBClient;
    @Bean
    public void DynamoDBClientBuilderInitializer() {

        amazonDynamoDBClient = this.initiateClient();

    }

    private AmazonDynamoDB initiateClient() {
        return AmazonDynamoDBClientBuilder.standard().withEndpointConfiguration(
                new AwsClientBuilder.EndpointConfiguration("http://localhost:4569", "us-west-1"))
                    .build();
    }
}

然后我有 class 我想在 spring 项目中使用该客户端的地方,最好在任何方法之外做这样的事情吗

    @Autowired
    private DynamoDBClientBuilder db;
    private AmazonDynamoDB amazonDynamoDBClient = null;

然后在构造函数或我们要使用客户端的地方执行此操作

amazonDynamoDBClient = db.amazonDynamoDBClient;

我不太确定为什么我得到一个空指针似乎配置 class 没有在想要使用它的 class 之前启动。也有兴趣听听最佳实践是什么,或者是否有更好的方法来做到这一点。

谢谢

试试这个:

@Configuration
public class DynamoDBClientBuilder {
    @Bean
    public AmazonDynamoDB amazonDynamoDB() {
        return AmazonDynamoDBClientBuilder.standard().withEndpointConfiguration(
                new AwsClientBuilder.EndpointConfiguration("http://localhost:4569", "us-west-1"))
                .build();
    }
}

然后像这样注入你的 bean:

@Autowired
AmazonDynamoDB amazonDynamoDB;

或使用构造函数(推荐):

private final AmazonDynamoDB amazonDynamoDB;

@Autowired
public MyClass(AmazonDynamoDB amazonDynamoDB) {
        this.amazonDynamoDB = amazonDynamoDB;
    }

并且请注意,您的配置类必须被组件扫描覆盖,以便能够在 spring 上下文

中创建 bean