java - Spring Boot Autowiring 时的空指针

标签 java spring spring-boot coding-style

寻找 Autowiring 外部 sdk 类的标准是什么,我正在尝试这种方式,但得到一个空指针。我在 Spring Boot 项目中使用 AmazonDynamoDBClient。所以我想我的配置类是这样的


@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();
    }
}

然后我想在 spring 项目中使用该客户端的类,最好在任何方法之外执行类似的操作

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

然后在构造函数中或我们想要使用客户端的地方

amazonDynamoDBClient = db.amazonDynamoDBClient;

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

谢谢

最佳答案

试试这个:

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

然后像这样注入(inject)你的bean:

@Autowired
AmazonDynamoDB amazonDynamoDB;

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

private final AmazonDynamoDB amazonDynamoDB;

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

请注意,您的配置类必须包含组件扫描才能在 Spring 上下文中创建 bean

关于java - Spring Boot Autowiring 时的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61076132/

相关文章:

java - 最后一个成功发送到服务器的数据包是在 79,547 毫秒之前。比服务器配置值 'wait_timeout' 长

java - 从以下位置重新填充 JTable

java - SwingWorker、Thread.sleep() 还是 javax.swing.timer?我需要 "insert a pause"

deployment - 无法在 Jelastic 上部署 Spring boot 应用程序

java - 扩展 ArrayList 并使用/创建类似的构造函数

java - Spring SearchQuery ElasticSearch 的每次点击得分

java - 5.2 中的 spring AnnotationUtils 不再搜索父类?

java - Tomcat - 未找到 Spring DataSource JNDI 但它存在

java - Spring Boot - Time.schedule 的替代方案?

java - Springfox Swagger : Could not resolve pointer:/definitions/Instant