适用于 Java 的 AWS SDK 1.x 和 2.x 之间的差异 - AWS SDK for Java 2.x

适用于 Java 的 AWS SDK 1.x 和 2.x 之间的差异

本部分介绍在将应用程序从使用适用于 Java 的 AWS SDK 版本 1.x 转换为使用版本 2.x 时需要注意的主要更改。

软件包名称更改

从 SDK for Java 1.x 到 SDK for Java 2.x 的一个明显变化是软件包名称的更改。软件包名称在 SDK 2.x 中以 software.amazon.awssdk 开头,而 SDK 1.x 则使用 com.amazonaws

这些名称区分了 SDK 1.x 与 SDK 2.x 的 Maven 构件。SDK 2.x 的 Maven 构件使用 software.amazon.awssdk groupId,而 SDK 1.x 使用 com.amazonaws groupId。

有些时候,您的代码会要求项目具有 com.amazonaws 依赖项,而该项目原本只使用 SDK 2.x 构件。这方面的一个例子是使用服务器端 AWS Lambda。本指南前面的设置 Apache Maven 项目部分对此进行了介绍。

注意

SDK 1.x 中的几个软件包名称包含 v2。在这种情况下,使用 v2 通常表示软件包中的代码旨在与相关服务的版本 2 配合使用。

由于软件包的完整名称以 com.amazonaws 开头,因此这些是 SDK 1.x 组件。SDK 1.x 中这些软件包名称的示例有:

  • com.amazonaws.services.dynamodbv2

  • com.amazonaws.retry.v2

  • com.amazonaws.services.apigatewayv2

  • com.amazonaws.services.simpleemailv2

将版本 2.x 添加到您的项目

使用适用于 Java 的 AWS SDK 2.x 时,推荐使用 Maven 方法来管理依赖项。要将版本 2.x 组件添加到您的项目,只需使用 SDK 上的依赖项来更新 pom.xml 文件。

<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.21</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>dynamodb</artifactId> </dependency> </dependencies>

在将项目迁移到版本 2.x 时,您也可以并行使用版本 1.x 和 2.x

不可变 POJO

客户端和操作的请求和响应对象现在不可变,并且在创建之后不能更改。要重复使用一个请求或响应变量,您必须生成一个要分配给该请求或响应变量的新对象。

例 在 1.x 中更新请求对象
DescribeAlarmsRequest request = new DescribeAlarmsRequest(); DescribeAlarmsResult response = cw.describeAlarms(request); request.setNextToken(response.getNextToken());
例 在 2.x 中更新请求对象
DescribeAlarmsRequest request = DescribeAlarmsRequest.builder().build(); DescribeAlarmsResponse response = cw.describeAlarms(request); request = DescribeAlarmsRequest.builder() .nextToken(response.nextToken()) .build();

Setter 和 getter 方法

在适用于 Java 的 AWS SDK 2.x 中,setter 方法名称不包含 setwith 前缀。例如,*.withEndpoint() 现为 *.endpoint()

Getter 方法名称不使用 get 前缀。

例 在 1.x 中使用 setter 方法
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard() .withRegion("us-east-1") .build();
例 在 2.x 中使用 setter 方法
DynamoDbClient client = DynamoDbClient.builder() .region(Region.US_EAST_1) .build();
例 在 1.x 中使用 getter 方法
String token = request.getNextToken();
例 在 2.x 中使用 getter 方法
String token = request.nextToken();

模型类名

代表服务响应的模型类名在 v2 中以 Response 结尾,而不是以 v1 使用的 Result 结尾。

例 在 v1 中代表响应的类名
CreateApiKeyResult AllocateAddressResult
例 在 v2 中代表响应的类名
CreateApiKeyResponse AllocateAddressResponse

库和实用工具的迁移状态

适用于 Java 的 SDK 库和实用工具

下表列出了适用于 Java 的 SDK 库和实用工具的迁移状态。

版本 1.12.x 中的名称 版本 2.x 中的名称 自 2.x 的以下版本起
DynamoDBMapper DynamoDbEnhancedClient 2.12.0
Waiter Waiter 2.15.0
CloudFrontUrlSigner、CloudFrontCookieSigner CloudFrontUtilities 2.18.33
TransferManager S3TransferManager 2.19.0
EC2 元数据客户端 EC2 元数据客户端 2.19.29
S3 URI 解析器 S3 URI 解析器 2.20.41
IAM policy 生成器 IAM 策略生成器 2.20.126
S3 事件通知 S3 事件通知 2.25.11
Amazon SQS 客户端缓存 适用于 Amazon SQS 的自动请求批处理 API 2.28.0
进程侦听程序 进程侦听程序 尚未发布

相关库

下表列出了单独发布但可与适用于 Java 的 SDK 2.x 配合使用的库。

适用于 Java 的 SDK 2.x 中使用的名称 最低版本
Amazon S3 加密客户端 3.0.01
适用于 DynamoDB 的 AWS 数据库加密 SDK 3.0.02

1Amazon S3 加密客户端

适用于 Amazon S3 的加密客户端可通过使用以下 Maven 依赖项获得。

<dependency> <groupId>software.amazon.encryption.s3</groupId> <artifactId>amazon-s3-encryption-client-java</artifactId> <version>3.x</version> </dependency>

2适用于 DynamoDB 的 AWS 数据库加密 SDK

适用于 DynamoDB 的 AWS 数据库加密 SDK 现可与 V2 配合使用,可通过使用以下 Maven 依赖项获得。

<dependency> <groupId>software.amazon.cryptography</groupId> <artifactId>aws-database-encryption-sdk-dynamodb</artifactId> <version>3.x</version> </dependency>

AWS 数据库加密 SDK 开发人员指南》(名为适用于 Java 的 Amazon DynamoDB Encryption Client)和 GitHub 中提供了与 Java SDK v1 配合使用的 DynamoDB 加密库的信息。

有关与 Java SDK V2 兼容的 DynamoDB 加密库的更多信息,请参阅《AWS 数据库加密 SDK 开发人员指南》和 GitHub 源

AWS 数据库加密 SDK 开发人员指南》中提供了有关加密库的迁移信息。

库和实用工具的迁移详细信息