【发布时间】:2020-04-07 08:47:52
【问题描述】:
寻找自动连接外部 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;
我不太确定为什么我得到一个空指针,似乎配置类没有在想要使用它的类之前启动。也很想听听最佳做法是什么,或者有更好的方法来做到这一点。
谢谢
【问题讨论】:
-
所有自动装配的最佳实践是使用构造函数注入而不是字段注入。是否注入构建器或构建的客户端将取决于您的特定需求,例如能够为每个服务自定义它或处理生命周期操作。请注意,Spring Cloud AWS 可以为您处理很多这种自动配置,尽管它有非常强烈的意见并且并不适合所有人。
-
实际上上面给了我一个关于 amazonDynamoDBClient = db.amazonDynamoDBClient; 的空指针异常,有什么想法吗?
-
是的,按照我的建议使用构造函数注入。
@Autowired字段直到对象被创建后才被注入,这是很大的问题。
标签: java spring spring-boot coding-style